React組件有自己的生命周期方法,React將組件從掛載(Mounting)-->更新(Updating)-->卸載Unmounting完成整個生命周期。每個階段都有不同的方法以便于開發(fā)者自定義組件的特性。
整個組件的生命周期其實包含幾種情況:
- 組件被掛載(實例化)
- 組件狀態(tài)或?qū)傩愿?/li>
- 組件被卸載(銷毀)
掛載
掛載階段組件擁有一共5個相關(guān)方法
-
getDefaultProps--------這個方法將在組件被創(chuàng)建時自動執(zhí)行一次,其中的值會被緩存下來作為this.props的默認(rèn)值 -
getInitialState--------這個方法也會在組件被創(chuàng)建時自動執(zhí)行一次,其中的值會被緩存下來作為this.state的默認(rèn)值 -
componentWillMount-------組件將要被掛載時自動執(zhí)行一次,這個方法在組件的整個生命周期中只會執(zhí)行一次,所以可以用來初始化一些組件的相關(guān)信息 -
render--------將組件渲染到頁面中 -
componentDidMount--------表示組件已經(jīng)被掛載到頁面上,頁面已經(jīng)存在了組件相關(guān)的DOM結(jié)構(gòu),這時可以使用Ajax請求數(shù)據(jù)或一些DOM相關(guān)的操作
更新(狀態(tài)或?qū)傩愿淖儯?/h2>
更新階段共有4個相關(guān)方法
-
componentWillReceiveProps(newProps)--------當(dāng)組件獲取到新的屬性props時調(diào)用,初始化掛載階段不會調(diào)用 -
shouldComponentUpdate(nextProps, nextState)--------當(dāng)獲取到新的props或state,將要渲染之前調(diào)用,返回一個布爾值,為true表示渲染組件,false則不會渲染 -
componentWillUpdate--------當(dāng)確定組件需要更新,在render方法之前調(diào)用(this.setState方法調(diào)用會引起組件更新),這個方法中不能使用this.setState -
componentDidUpdate--------當(dāng)組件已經(jīng)被更新完畢渲染到DOM后,可以做一些更新之后的相關(guān)操作
卸載
組件被銷毀階段只有一個方法
-
componentWillUnmount--------當(dāng)組件從DOM中被移除時執(zhí)行一次,可以在這里做一些必要的清理操作,例如清楚無效的定時器
以上就是組件生命周期相關(guān)的所有方法,需要注意的一點是render在組件第一次被掛載時執(zhí)行一次,而在組件更新階段當(dāng)shouldComponentUpdate方法返回true之后也會執(zhí)行,在這個方法里可以使用this.props和this.state獲取組件的狀態(tài)與屬性,但是絕對不能在這個方法里使用this.setState改變組件狀態(tài)