直接上代碼:javascript
//第一個參數是構造的組件,第二個參數是使用組件的容器 ReactDom.render( <Avatar name='' link='' />, document.getElementByID(''));
render
渲染頁面 將組件放到選定的元素裏面html
使用React.createClass({render:function(){return ( 我是dom元素 )}})
構建java
var ProfilePic = React.createClass({ render: function() { //能夠在return前進行相關處理 return ( <img src={this.props.link} /> ); } });
1.return()
括號中只能填寫一個標籤,不然報錯
2.this.props
是ReactDOM.render
中傳遞的屬性,是一個對象 對於組件套組件的方式能夠傳遞屬性值,以下面例子react
// 渲染到容器 ReactDOM.render( <Avatar name="GuoYongfeng" link="https://avatars2.githubusercontent.com/u/8686869?v=3&s=460" />, document.getElementById('example') ); var Avatar = React.createClass({ render: function() { return ( <div> <ProfilePic link={this.props.link} /> //this.props包含了name和link的屬性,同時在ProfilePic組件中可使用this.props獲取link的值 <ProfileLink name={this.props.name} /> </div> ); } });
使用getInitialState:function(){return {}}
聲明初始化變量,使用this.setState({鍵值對})
修改getInitialState
函數中的變量,經過this.state
對象獲取屬性的值,代碼以下:git
var ClickApp = React.createClass({ getInitialState:function(){ return { clickCount: 0, } }, handleClick: function(e){ this.setState({ clickCount: this.state.clickCount + 1, }); }, render: function(){ return ( <div> <h2>點擊下面按鈕</h2> <button onClick={this.handleClick}>點擊我</button> <p>你一共點擊了:{this.state.clickCount}</p> </div> ) } });
getInitialState
在組件的生命週期內只會運行一次,用來設置組件的初始狀態。github
this.props
對象的屬性與組件的屬性一一對應,可是有一個例外,就是 this.props.children
屬性,它表示組件的全部子節點。this.props.children
的值有三種可能:若是當前組件沒有子節點,它就是 undefined
;若是有一個子節點,數據類型是 object
;若是有多個子節點,數據類型就是 array
。React 提供一個工具方法 React.Children
來處理 this.props.children
。咱們能夠用 React.Children.map
來遍歷子節點,而不用擔憂 this.props.children
的數據類型是 undefined
仍是 object
npm
驗證組件提供的參數是否知足要求。如 propTypes: { title: React.PropTypes.string.isRequired },render:function(){return}
代碼的做用就是說明title
是必須填寫的並且爲字符串。 使用 getDefaultProps
來配置默認的字符串 getDefaultProps : function () { return { title : 'Hello World'};},
gulp
生命週期分爲三個狀態:promise
Mounting
:已插入真實 DOMbabel
Updating
:正在被從新渲染
Unmounting
:已移出真實 DOM
React 爲每一個狀態都提供了兩種處理函數,will 函數在進入狀態以前調用,did 函數在進入狀態以後調用,三種狀態共計五種處理函數。
componentWillMount()
componentDidMount()
componentWillUpdate(object nextProps, object nextState)
componentDidUpdate(object prevProps, object prevState)
componentWillUnmount()
此外,React 還提供兩種特殊狀態的處理函數。
componentWillReceiveProps(object nextProps)
:已加載組件收到新的參數時調用
shouldComponentUpdate(object nextProps, object nextState)
:組件判斷是否從新渲染時調用
1.內嵌的jsx
代碼,須要在script標籤中要加上type="text/babel"
,並引入browser.min.js
5.8.24文件,或者使用bower install babel --save-dev
下載babel文件中獲取,將ES6
轉化爲ES5
2.[已廢棄]使用react-tools
模塊,將代碼轉化成線上代碼 使用npm install -g react-tools
安裝,使用jsx --watch src/ build/
轉化
3.能夠直接使用babel
轉化,babel --presets react [es2015] src --watch --out-dir build
,其中[es2015]
是選填項,src
是源文件路徑 build
是編譯後的文件路徑
4.在gulp
中使用gulp-react
轉化
對於某些富文本內容,在頁面上顯示
var content='<strong>content</strong>'; React.render( <div>{content}</div>, document.body ); //會直接顯示 <strong>content</strong> 至關於ejs中<%= %>
Html默認會對Html文章轉義,如何不轉義
var content='<strong>content</strong>'; React.render( <div dangerouslySetInnerHTML={{__html: content}}></div>, document.body );
1.reactreact
包括 React.createElement
、 React.createClass
、React.Component
、 React.PropTypes
、 React.Children
react-dom
包括 ReactDOM.render
、 .unmountComponentAtNode
、 .findDOMNode
react-dom-server
包括.renderToString
和 .renderToStaticMarkup
react-with-addons
React.render
方法能夠渲染HTML結構,也能夠渲染React組件。JSX
使用首字母大小寫來區分是本地組件類仍是Html標籤。
(1)渲染HTML標籤,聲明變量採用首字母小寫
var myDivElement = <div className="foo" />; React.render(myDivElement, document.body);
(2)渲染React組件,聲明變量採用首字母大寫
var MyComponent = React.createClass({/*...*/}); var myElement = <MyComponent someProperty={true} />; React.render(myElement, document.body);
1.數據的傳遞都是須要至於{}
之中,包括賦值<div {...other} className={fancyClass} />
,{}
中的變量都是能夠經過ReactDom.render
時傳入
2.使用default
爲前綴,加上Checked
,Value
等設置默認值,如defaultChecked
,defaultValue
等,在組件中使用已有的屬性。
3.this.refs
引用對象集合,在Dom元素上添加了ref
屬性後,就會將這個Dom元素添加到this.refs
之中,在頁面中這個標籤的值是惟一的,this.refs.xxxx.value
這種方式能夠獲取變量的值,ref
是一種回調的原理,當子組件的該屬性值改變,相應的值會回調給父組件
4.在組件實現時,return(<div>{ }</div>)
中的{}
能夠加入大量的javascript處理函數,以下:
return ( <ul> { this.props.list.map(function (child) { return <li>{child}</li> //注意這種寫法,<li>{child}</li> }) } </ul> );
5.組件能夠直接當作Dom標籤同樣使用,像button
,h1
等
6.與Javascript DOM中同樣的寫法,class
對於className
,html
對應於htmlFor
;另外,對於非html內置的屬性,必定要加上data-
,如<div data-custom-attribute="foo" />
`
7.JSX 的基本語法規則
遇到 HTML 標籤(以 < 開頭),就用 HTML 規則解析;
遇到代碼塊(以 { 開頭),就用 JavaScript 規則解析
8.this.props 和 this.state不一樣點
因爲 this.props
和 this.state
都用於描述組件的特性,可能會產生混淆。一個簡單的區分方法是,this.props
表示那些一旦定義,就再也不改變的特性,而 this.state
是會隨着用戶互動而產生變化的特性。
9.組件中樣式的寫法:style="opacity:{this.state.opacity};"
這種方式錯誤;使用 style={{opacity: this.state.opacity}}
這種方式,第一重大括號表示這是 JavaScript 語法,第二重大括號表示樣式對象。
10.在componentDidMount
中的設置請求返回的數據須要特別注意只有當數據返回回來纔有效,經過 this.isMounted()
判讀,或者直接使用promise
的then
方法.查看示例12
1.阮一峯老師的[react-demos](https://github.com/ruanyf/react-demos)