摘要:組件的生命周期包含三個(gè)主要部分掛載組件被插入到中。更新組件被重新渲染,查明是否應(yīng)該刷新。提供生命周期方法,你可以在這些方法中放入自己的代碼。完整實(shí)例展示總結(jié)生命周期調(diào)用次數(shù)能否使用全局調(diào)用一次否否是否是是否否否否
組件的生命周期包含三個(gè)主要部分:
掛載: 組件被插入到DOM中。
更新: 組件被重新渲染,查明DOM是否應(yīng)該刷新。
移除: 組件從DOM中移除。
裝載組件觸發(fā)React提供生命周期方法,你可以在這些方法中放入自己的代碼。我們提供will方法,會(huì)在某些行為發(fā)生之前調(diào)用,和did方法,會(huì)在某些行為發(fā)生之后調(diào)用。
object在組件被掛載之前調(diào)用。狀態(tài)化的組件應(yīng)該實(shí)現(xiàn)這個(gè)方法,返回初始的state數(shù)據(jù)。
初始化 this.state 的值,只在組件裝載之前調(diào)用一次。
如果是使用 ES6 的語(yǔ)法,你也可以在構(gòu)造函數(shù)中初始化狀態(tài),比如:
class Counter extends Component { constructor(props) { super(props); this.state = { count: props.initialCount }; } render() { // ... } }
只在組件創(chuàng)建時(shí)調(diào)用一次并緩存返回的對(duì)象(即在 React.createClass 之后就會(huì)調(diào)用)。
因?yàn)檫@個(gè)方法在實(shí)例初始化之前調(diào)用,所以在這個(gè)方法里面不能依賴 this 獲取到這個(gè)組件的實(shí)例。
在組件裝載之后,這個(gè)方法緩存的結(jié)果會(huì)用來(lái)保證訪問(wèn) this.props 的屬性時(shí),當(dāng)這個(gè)屬性沒(méi)有在父組件中傳入(在這個(gè)組件的 JSX 屬性里設(shè)置),也總是有值的。
如果是使用 ES6 語(yǔ)法,可以直接定義 defaultProps 這個(gè)類屬性來(lái)替代,這樣能更直觀的知道 default props 是預(yù)先定義好的對(duì)象值:
Counter.defaultProps = { initialCount: 0 };
componentWillMount()只會(huì)在裝載之前調(diào)用一次,在 render 之前調(diào)用,你可以在這個(gè)方法里面調(diào)用 setState 改變狀態(tài),并且不會(huì)導(dǎo)致額外調(diào)用一次 render。
組裝生成這個(gè)組件的 HTML 結(jié)構(gòu)(使用原生 HTML 標(biāo)簽或者子組件),也可以返回 null或者 false,這時(shí)候 ReactDOM.findDOMNode(this) 會(huì)返回 null。
componentDidMount()在掛載結(jié)束之后馬上被調(diào)用。只會(huì)在裝載完成之后調(diào)用一次,在 render 之后調(diào)用,從這里開始可以通過(guò) ReactDOM.findDOMNode(this) 獲取到組件的 DOM 節(jié)點(diǎn)。
更新組件觸發(fā)當(dāng)一個(gè)掛載的組件接收到新的props的時(shí)候被調(diào)用。該方法應(yīng)該用于比較this.props和nextProps,然后使用this.setState()來(lái)改變state。
在初始化渲染的時(shí)候,該方法不會(huì)調(diào)用。
componentWillReceiveProps: function(nextProps) { this.setState({ likesIncreasing: nextProps.likeCount > this.props.likeCount }); }
當(dāng)組件做出是否要更新DOM的決定的時(shí)候被調(diào)用。
在接收到新的 props或者 state,將要渲染之前調(diào)用。該方法在初始化渲染的時(shí)候不會(huì)調(diào)用,在使用 forceUpdate 方法的時(shí)候也不會(huì)。
如果確定新的 props 和 state 不會(huì)導(dǎo)致組件更新,則此處應(yīng)該返回 false。
shouldComponentUpdate: function(nextProps, nextState) { return nextProps.id !== this.props.id; }
如果 shouldComponentUpdate 返回 false,則 render() 將不會(huì)執(zhí)行,直到下一次 state 改變。
在更新發(fā)生之前被調(diào)用。你可以在這里調(diào)用this.setState()。
在更新發(fā)生之后調(diào)用。
卸載組件觸發(fā)在組件移除和銷毀之前被調(diào)用。清理工作應(yīng)該放在這里。比如無(wú)效的定時(shí)器,或者清除在 componentDidMount 中創(chuàng)建的 DOM 元素。
裝載的方法DOMElement可以在任何掛載的組件上面調(diào)用,用于獲取一個(gè)指向它的渲染DOM節(jié)點(diǎn)的引用。
當(dāng)你知道一些很深的組件state已經(jīng)改變了的時(shí)候,可以在該組件上面調(diào)用,而不是使用this.setState()。
完整實(shí)例展示
var Button = React.createClass({ getInitialState: function() { return { data:0 }; }, setNewNumber: function() { this.setState({data: this.state.data + 1}) }, render: function () { return (總結(jié)); } }) var Content = React.createClass({ componentWillMount:function() { console.log("Component WILL MOUNT!") }, componentDidMount:function() { console.log("Component DID MOUNT!") }, componentWillReceiveProps:function(newProps) { console.log("Component WILL RECIEVE PROPS!") }, shouldComponentUpdate:function(newProps, newState) { return true; }, componentWillUpdate:function(nextProps, nextState) { console.log("Component WILL UPDATE!"); }, componentDidUpdate:function(prevProps, prevState) { console.log("Component DID UPDATE!") }, componentWillUnmount:function() { console.log("Component WILL UNMOUNT!") }, render: function () { return ( ); } }); ReactDOM.render({this.props.myNumber}
, document.getElementById("example") );
生命周期 | 調(diào)用次數(shù) | 能否使用setSate() |
---|---|---|
getDefaultProps | 1(全局調(diào)用一次) | 否 |
getInitialState | 1 | 否 |
componentWillMount | 1 | 是 |
render | >=1 | 否 |
componentDidMount | 1 | 是 |
componentWillReceiveProps | >=0 | 是 |
shouldComponentUpdate | >=0 | 否 |
componentWillUpdate | >=0 | 否 |
componentDidUpdate | >=0 | 否 |
componentWillUnmount | 1 | 否 |
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/80371.html
摘要:卸載階段組件卸載和銷毀老版生命周期之前的生命周期初始化階段涉及個(gè)鉤子函數(shù)這些方法會(huì)在組件初始化的時(shí)候被調(diào)用,只跟實(shí)例的創(chuàng)建有關(guān)。 前言:React 的版本從 v15 到 v16.3 ,再到v16.4,現(xiàn)在最新的版本是 v16.8了。其中最大的變化可能是React Hooks的加入,而最令人困惑的卻是它的生命周期,新舊生命周期函數(shù)混雜在一起,難免會(huì)讓許多新來(lái)者有很多困惑。所以這一篇我們來(lái)...
摘要:所以對(duì)于組件更新階段的組件生命周期,我們簡(jiǎn)單提及并且提供一些資料給大家。這里為了知識(shí)的完整,補(bǔ)充關(guān)于更新階段的組件生命周期你可以通過(guò)這個(gè)方法控制組件是否重新渲染。大家對(duì)這更新階段的生命周期比較感興趣的話可以查看官網(wǎng)文檔。 React.js 小書 Lesson20 - 更新階段的組件生命周期 本文作者:胡子大哈本文原文:http://huziketang.com/books/react...
摘要:組件生命周期此文章適合之前的版本,,添加了一些新的生命周期函數(shù),同時(shí)準(zhǔn)備廢棄一些會(huì)造成困擾的生命周期函數(shù)。每個(gè)生命周期階段調(diào)用的鉤子函數(shù)會(huì)略有不同。 React組件生命周期 此文章適合 React@17 之前的版本,React@16.3.0,添加了一些新的生命周期函數(shù),同時(shí)準(zhǔn)備廢棄一些會(huì)造成困擾的生命周期函數(shù)。所有如果在React@17 發(fā)布之前,這篇文章還是適用的。新的生命周期請(qǐng)看官...
摘要:組件生命周期構(gòu)造方法是對(duì)類的默認(rèn)方法,通過(guò)命令生成對(duì)象實(shí)例時(shí)自動(dòng)調(diào)用該方法。該生命周期可以發(fā)起異步請(qǐng)求,并。后廢棄該生命周期,可以在中完成設(shè)置渲染組件是一個(gè)組件必須定義的生命周期,用來(lái)渲染。該生命周期內(nèi)可以進(jìn)行。 React組件生命周期 constructor( ) 構(gòu)造方法 constructor是ES6對(duì)類的默認(rèn)方法,通過(guò) new 命令生成對(duì)象實(shí)例時(shí)自動(dòng)調(diào)用該方法。并且,該方法是...
摘要:因?yàn)槭巧钊胂盗形恼拢疚牟粫?huì)仔細(xì)介紹每個(gè)生命周期方法的使用,而是會(huì)重點(diǎn)講解在使用組件生命周期時(shí),經(jīng)常遇到的疑問(wèn)和錯(cuò)誤使用方式。父組件發(fā)生更新導(dǎo)致的組件更新,生命周期方法的調(diào)用情況同上所述。 文:徐超,《React進(jìn)階之路》作者授權(quán)發(fā)布,轉(zhuǎn)載請(qǐng)注明作者及出處 React 深入系列4:組件的生命周期 React 深入系列,深入講解了React中的重點(diǎn)概念、特性和模式等,旨在幫助大家加深...
摘要:本文主要介紹之后的生命周期。該方法有兩個(gè)參數(shù)和返回值為對(duì)象不需要返回整體,把需要改變的返回即可。必須有一個(gè)返回值,返回的數(shù)據(jù)類型可以有。此生命周期主要用于優(yōu)化性能。最后,說(shuō)明一點(diǎn)這三個(gè)生命周期在未來(lái)版本中會(huì)被廢棄。 React16.3.0開始,生命周期進(jìn)行了一些變化。本文主要介紹React16.3.0之后的生命周期。 React16.3.0之前生命周期: 16版本之前的react組件的...
閱讀 1768·2023-04-26 01:44
閱讀 1211·2021-11-12 10:34
閱讀 1578·2021-09-09 09:33
閱讀 1729·2019-08-30 15:44
閱讀 2892·2019-08-30 13:49
閱讀 2190·2019-08-29 15:26
閱讀 943·2019-08-26 13:30
閱讀 1409·2019-08-23 18:15