refs 對組件的引用
render() 會實行一個虛擬的DOM,renderDOM.render會直接返回對 組件的真正的引用
Jsx本身并不會返回一個組件實例,只是一個ReactElement對象:一個關(guān)于所掛載的組件的輕量級的描述
如果給一個DOM組件(譬如div)附加ref屬性,你會直接拿到DOM節(jié)點。如果給一個復(fù)合組件(如<TextInput>)附加ref屬性,會拿到對應(yīng)的組件類的實例
<input ref = 'myRefString'>;
var input= 你必須以this.refs['myRefString']的形式來訪問引用。就可以直接訪問這個input標簽的
不要用點字符,或者就是前面的例子那樣的方式用一個虛函數(shù)
router配置
入口index里面要進行router的配置,公用的部分,比如菜單欄,寫在最完成的Route里面,然后內(nèi)部加載的內(nèi)容,根據(jù)路由加載不同的component,然后在container中進行其配置
這里還要注意的一個地方是,所有的虛擬DOM都是在這里通過ReactDOM.render進行實例化的,給一個具體的位置
組件的生命周期函數(shù)
在不同的生命周期要進行不同的操作
不同的生命周期中要完成不同的任務(wù),我們一般在componentDidMount()組件第一次加載成功之后,這時候可以用getDOMNode()進行組件的訪問,進行顯示狀態(tài)的改變,進行setTimeOut,進行ajax發(fā)請求。
componentWillReceiveProps(nextprops)父組件進行render的時候,會讓其子組件執(zhí)行這個函數(shù),無論props有沒有更行,也無論父子組件是不是進行了交互? ? ??
shouldComponentUpdate 如果返回的是個false,則在下次state,change的時候不調(diào)用render
componentDidUpdate()組件在掛載之后,進行setState的時候,并且shouldComponentUpdate返回結(jié)果是true的時候,會調(diào)用這個函數(shù),一般指的是組件的內(nèi)部進行的dom樹的更新
componentWillUnmount()組件從DOM中UNMount之后執(zhí)行,一般用來清除clearInterval
組件進行更新的四種方式:?
1 首次渲染render的時候
2 自身的setState被調(diào)用的時候
3 父組件的props進行更改的時候
4 調(diào)用this.forceUpdate的時候
頁面內(nèi)加載內(nèi)容的跳轉(zhuǎn)
對于頁面內(nèi)的跳轉(zhuǎn),采取的主要是a標簽進行相對路徑的改變
組件內(nèi)要根據(jù)邏輯判斷某模塊的展示狀態(tài)展示內(nèi)容的時候,我們一般采取的是用js的邏輯判斷,即用{this.function},在具體的function中進行,邏輯判斷,然后return不同的內(nèi)容
組件的默認state
1. ?createClass帶有的getInitialState()方法,通過return進行默認狀態(tài)的配置,下文中進行如果涉及到state的改變的話,我們采取setState()方法進行重寫,state的改變會導致整個頁面進行diff操作,重新加載新的dom樹
2. ? 使用constructor進行初始化state
兄弟組件進行通信
1 采用props的方式進行父子通信
2 采用觀察者模式
// eventProxy.js 進行事件的分發(fā)
'use strict';
consteventProxy = {
onObj: {},
oneObj: {},
on:function(key, fn){
if(this.onObj[key] ===undefined) {
this.onObj[key] = [];
}
this.onObj[key].push(fn);
},
one:function(key, fn){
if(this.oneObj[key] ===undefined) {
this.oneObj[key] = [];
}
this.oneObj[key].push(fn);
},
off:function(key){
this.onObj[key] = [];
this.oneObj[key] = [];
},
trigger:function(){
letkey, args;
if(arguments.length ==0) {
returnfalse;
}
key =arguments[0];
args = [].concat(Array.prototype.slice.call(arguments,1));
if(this.onObj[key] !==undefined
&&this.onObj[key].length >0) {
for(letiinthis.onObj[key]) {
this.onObj[key][i].apply(null, args);
}
}
if(this.oneObj[key] !==undefined
&&this.oneObj[key].length >0) {
for(letiinthis.oneObj[key]) {
this.oneObj[key][i].apply(null, args);
this.oneObj[key][i] =undefined;
}
this.oneObj[key] = [];
}
}
};
exportdefaulteventProxy;