<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
React元件有哪些生命週期函數?類元件才有的生命週期函數,包括ES6語法的class以及create-react-class模組:
分為幾個階段:掛載,更新,解除安裝,錯誤處理;
1,掛載:constructor(常用)、static getDerivedStateFromProps、render(常用)、componentDidMount(常用)
constructor是類元件的建構函式,在這可以初始化元件的state或進行方法系結如:constructor(props){ super(props);this.state={test: 'test'};this.someFn = this.someFn.bind(this);},否則可以不用顯式實現constructor方法;
static getDerivedStateFromProps:在render之前被呼叫,它可以通過返回一個值改變state如:
static getDerivedStateFromProps(nextProps, prevState){ if(props.test !== state.test){ return {state: props.state}; //返回的這部分稱為partialState //這會稱為新的state的一部分,nextState將會是_assign({}, prevState, partialState); } return null; //返回的是null 或undefined,則nextState將是prevState,及不會改變元件的state;
它的目的只有一個,就是讓元件在props變化更新state,也是state的值依賴於props;不管出於什麼原因,或元件內的shouldComponentUpdate返回false,它都在渲染前被執行;
與static getDerivedStateFromProps相似的生命週期是componentWillReceiveProps(nextProps),在componentWillReceiveProps呼叫this.setState({...});改變state;在使用static getDerivedStateFromProps以及componentWillReceiveProps時要謹慎、需要考慮效能、避免bug的出現,有需要可以考慮React.PureComponent或React.memo或完全可控元件或使用key非可控元件來代替上面的getDerivedStateFromProps以及componentWillReceiveProps;
另外有個UNSAFE_componentWillReceiveProps是在父元件重新渲染時觸發;
render就是渲染函數,返回React元素,它是class元件必須實現的方法;是個純函數,只管返回React元素,且不會直接與介面互動,互動一般放在ComponentDidMount或ComponentDidUpdate等週期中;render方法的返回值型別可以:
//可以是React元素如'<div/>'或'<MyComponent/>' //或用React.createElement(type, ?props, ?children)建立的元素、 //可以是陣列(該陣列類似於this.props.children的形式['Test', ['nest test'], ...others]) //或Fragments、 //可以是字串或數值型別(被當作字串)、 //可以是布林型別或null(當是布林或null時,什麼都不渲染); class Test extends React.Component{ render(){ //return 'Hello Test'; //return true; //return ['Hello', ' Test']; //return <div>Test</div> //return <MyComponent>Test</MyComponent> return null; } }
componentDidMount是元件掛載到React元件樹之後呼叫;在這裡可以獲取非同步資料或者依賴DOM節點的初始化,也比較適合在這個時候新增訂閱(記得在componentWillUnmount時取消訂閱);在此呼叫setState會觸發額外的渲染,但它發生在瀏覽器更新螢幕之前,所以即使呼叫了兩次的render,使用者也看不到中間狀態;
2,更新:static getDerivedStateFromProps、shouldComponentUpdate、render(常用)、getSnapshotBeforeUpdate、componentDidUpdate(常用)
shouldComponentUpdate:在繼承ReactComponent的元件可用,繼承React.PureComponent的元件不可用;返回true表示更新元件,否則相反,也就是當shouldComponentUpdate返回false時,render方法不會被呼叫,componentDidUpdate也不會被呼叫;shouldComponentUpdate(nextProps, nextState){}可以手動對比this.props與nextProps、this.state與nextState;但是如果返回的是false,不會阻止子元件在state更新時的重新渲染,即使子元件更新了也拿不到新的props,因為父元件沒有更新;
getSnapshotBeforeUpdate:在最後一次渲染輸出(提交到DOM節點)之前呼叫,可以在元素提交到DOM之前收集當前的DOM資訊(例如當前DOM的捲動位置),之後返回待傳給componentDidUpdate週期方法(該方法是元素提交到DOM之後呼叫的,所以此時獲取的DOM資訊是更新後的);
componentDidUpdate:componentDidUpdate(prevProps, prevState, snapshot){};元件更新後被呼叫,可以在此處操作DOM,比較前後props或state非同步請求資料等;第三個引數是元件的生命週期getSnapshotBeforeUpdate的返回值,若沒有定義getSnapshotBeforeUpdate,則componentDidUpdate的第三個引數則為undefined;
3,解除安裝:componentWillUnmount(常用)
componentWillUnmount:該週期方法會在元件解除安裝及銷燬之前呼叫;可以在此處清楚timer、取消網路請求、取消訂閱等,釋放記憶體;
4,static getDerivedStateFromError、componentDidCatch;
static getDerivedStateFromError:
componentDidCatch:
到此這篇關於淺談React Component生命週期函數的文章就介紹到這了,更多相關React Component生命週期內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45