摘要:在組件的整個生命周期中,隨著該組件的或者發(fā)生改變,其表現(xiàn)也會有相應(yīng)的變化。一個組件的生命周期分為三個部分實例化存在期和銷毀時。該方法會創(chuàng)建一個虛擬,用來表示組件的輸出。渲染組件上一篇開發(fā)教程四數(shù)據(jù)流下一篇開發(fā)教程六與
在組件的整個生命周期中,隨著該組件的props或者state發(fā)生改變,其DOM表現(xiàn)也會有相應(yīng)的變化。一個組件就是一個狀態(tài)機,對于特定地輸入,它總返回一致的輸出。
一個React組件的生命周期分為三個部分:實例化、存在期和銷毀時。
實例化當(dāng)組件在客戶端被實例化,第一次被創(chuàng)建時,以下方法依次被調(diào)用:
getDefaultProps 設(shè)置屬性的默認值。 es6對應(yīng) deftaultProps
getInitialState 用來初始化每個實例的state。 es6 對應(yīng) constructor函數(shù)中的this.state
componentWillMount 渲染前
render 渲染
componentDidMount 渲染后
當(dāng)組件在服務(wù)端被實例化,首次被創(chuàng)建時,以下方法依次被調(diào)用:
1、getDefaultProps
2、getInitialState
3、componentWillMount
4、render
componentDidMount 不會在服務(wù)端被渲染的過程中調(diào)用。
getDefaultProps對于每個組件實例來講,這個方法只會調(diào)用一次,該組件類的所有后續(xù)應(yīng)用,getDefaultPops 將不會再被調(diào)用,其返回的對象可以用于設(shè)置默認的 props(properties的縮寫) 值。
getInitialState對于組件的每個實例來說,這個方法的調(diào)用有且只有一次,用來初始化每個實例的 state,在這個方法里,可以訪問組件的 props。每一個React組件都有自己的 state,其與 props 的區(qū)別在于 state只存在組件的內(nèi)部,props 在所有實例中共享。
getInitialState 和 getDefaultPops 的調(diào)用是有區(qū)別的,getDefaultPops 是對于組件類來說只調(diào)用一次,后續(xù)該類的應(yīng)用都不會被調(diào)用,而 getInitialState 是對于每個組件實例來講都會調(diào)用,并且只調(diào)一次。
每次修改 state,都會重新渲染組件,實例化后通過 state 更新組件,會依次調(diào)用下列方法:
1、shouldComponentUpdate
2、componentWillUpdate
3、render
4、componentDidUpdate
但是不要直接修改 this.state,要通過 this.setState 方法來修改。
componentWillMount該方法在首次渲染之前調(diào)用,也是再 render 方法調(diào)用之前修改 state 的最后一次機會。
render
該方法會創(chuàng)建一個虛擬DOM,用來表示組件的輸出。對于一個組件來講,render方法是唯一一個必需的方法。render方法需要滿足下面幾點:
只能通過 this.props 和 this.state 訪問數(shù)據(jù)(不能修改)
可以返回 null,false 或者任何React組件
只能出現(xiàn)一個頂級組件,不能返回一組元素
不能改變組件的狀態(tài)
不能修改DOM的輸出
render方法返回的結(jié)果并不是真正的DOM元素,而是一個虛擬的表現(xiàn),類似于一個DOM tree的結(jié)構(gòu)的對象。react之所以效率高,就是這個原因。
componentDidMount該方法不會在服務(wù)端被渲染的過程中調(diào)用。該方法被調(diào)用時,已經(jīng)渲染出真實的 DOM,可以在該方法中通過 this.refs 訪問到真實的 DOM。
class App extends Component { static defaultProps = { name:"默認值" } constructor(props) { super(props); this.state = { num : 0 }; this.addNum = this.addNum.bind(this); } addNum(e) { e.preventDefault(); var num = ++this.state.num; this.setState({ num:num }) } componentWillMount() { this.setState({ num:10 }) } render() { return (); } componentDidMount() { console.log(this.refs.header) } }Welcome to React{this.props.name}
To get started, edit
src/App.js
and save to reload.
需要注意的是,由于 this.refs.[refName] 屬性獲取的是真實 DOM ,所以必須等到虛擬 DOM 插入文檔以后,才能使用這個屬性,否則會報錯。
存在期此時組件已經(jīng)渲染好并且用戶可以與它進行交互,比如鼠標點擊,手指點按,或者其它的一些事件,導(dǎo)致應(yīng)用狀態(tài)的改變,你將會看到下面的方法依次被調(diào)用
componentWillReceiveProps props在父組件改變時執(zhí)行
shouldComponentUpdate 如果你確定組件的 props 或者 state 的改變不需要重新渲染,可以通過在這個方法里通過返回 false 來阻止組件的重新渲染,返回 `false 則不會執(zhí)行 render 以及后面的 componentWillUpdate,componentDidUpdate 方法
componentWillUpdate 這個方法和 componentWillMount 類似,在組件接收到了新的 props 或者 state 即將進行重新渲染前,componentWillUpdate(object nextProps, object nextState) 會被調(diào)用,注意不要在此方面里再去更新 props 或者 state。
render
componentDidUpdate 這個方法和
每當(dāng)React使用完一個組件,這個組件必須從 DOM 中卸載后被銷毀,此時 componentWillUnmout 會被執(zhí)行,完成所有的清理和銷毀工作,在 componentDidMount 中添加的任務(wù)都需要再該方法中撤銷,如創(chuàng)建的定時器或事件監(jiān)聽器。
當(dāng)再次裝載組件時,以下方法會被依次調(diào)用:
1、getInitialState
2、componentWillMount
3、render
4、componentDidMount
整體流程 ES6 classES6 class
static propTypes
static defaultProps
constructor (this.state)對應(yīng)createClass
propTypes
getDefaultProps
getInitialState
static propTypes props值的類型檢查 static defaultProps 設(shè)置屬性的默認值
constructor ( this.state ) 初始化每個實例的statecomponentWillMount 該方法在首次渲染之前調(diào)用,也是再 render 方法調(diào)用之前修改 state 的最后一次機會。
componentDidMount 該方法被調(diào)用時,已經(jīng)渲染出真實的 DOM,可以在該方法中通過 this.refs 訪問到真實的
DOM。componentWillUnmount 每當(dāng)React使用完一個組件,這個組件必須從 DOM 中卸載后被銷毀,此時會被執(zhí)行
componentWillReceiveProps props在父組件改變時執(zhí)行 shouldComponentUpdate
如果你確定組件的 props 或者 state 的改變不需要重新渲染,可以通過在這個方法里通過返回 false 來阻止組件的重新渲染,返回
`false 則不會執(zhí)行 render 以及后面的 componentWillUpdate,componentDidUpdate 方法componentWillUpdate 這個方法和 componentWillMount 類似,在組件接收到了新的 props 或者
state 即將進行重新渲染前, componentDidUpdate 這個方法和componentDidMount</kdb> 類似,在組件重新被渲染之后,會被調(diào)用??梢栽谶@里訪問并修改 DOM。 render
渲染組件
上一篇:react開發(fā)教程(四)React數(shù)據(jù)流
下一篇:react開發(fā)教程(六)React與DOM
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/82642.html
摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...
摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...
摘要:當(dāng)組件裝載完畢時,就會被調(diào)用。它可以是一個回調(diào)函數(shù),這個回調(diào)函數(shù)會在組件被掛載后立即執(zhí)行。也可以是一個字符串吧放到原生的組件中,我們可以通過獲取到節(jié)點而如果吧放到組件上獲取到的就是組件的實例上一篇開發(fā)教程五生命周期下一篇開發(fā)教程七事件系統(tǒng) ReactDOM findeDOMNode 語法:DOMElement findDOMNode(ReactComponent component)...
閱讀 1062·2021-11-18 10:02
閱讀 1315·2021-09-23 11:22
閱讀 2621·2021-08-21 14:08
閱讀 1647·2019-08-30 15:55
閱讀 1734·2019-08-30 13:45
閱讀 3179·2019-08-29 16:52
閱讀 3102·2019-08-29 12:18
閱讀 1650·2019-08-26 13:36