React之子組件重新渲染

? 一直對React組件的生命周期理解的不夠深刻,例如在React官網(wǎng)中,有這樣一句話來描述shouldComponentUpdate()方法:

shouldComponentUpdate() is invoked before rendering when new props or state are being received.

? 我對這句話的理解是:shouldComponentUpdate()只有在propsstate更新的時候才會被調(diào)用。于是很自然的,我一直默認這樣一種場景:當父組件進行重新渲染(re-render)操作的時候,如果子組件的propsstate沒有改變,那么子組件就不會調(diào)用shouldComponentUpdate(),進而也不會調(diào)用render()方法。但是,事實是這樣的嗎?

? 我們建立這樣一個場景:父組件能夠周期性的進行渲染,子組件接收父組件傳遞的一個props,但并不曾改變它,即驗證該場景下shouldComponentUpdate()是否會被調(diào)用。父組件的render()方法如下:

  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
        <Child test={1}/>
      </div>
    );
  }

? 俗話說的好,talk is cheap, show me the code。使用CodePen來創(chuàng)建這樣的一個場景。在子組件所有的生命周期函數(shù)中打上log,特別的在shouldComponentUpdate()中驗證nextPropsthis.props

  shouldComponentUpdate(nextProps, nextState) {
    console.log(nextProps.test === this.props.test);
    console.log('shouldComponentUpdate');
    return true;
  }

? 結(jié)果大大出乎我的意料,console.log(nextProps.test === this.props.test);輸出永遠是true,但是控制臺內(nèi)不停地打印出:

"componentWillReceiveProps"
true
"shouldComponentUpdate"
"componentWillUpdate"
"render"
"componentDidUpdate"

? 子組件內(nèi)并沒有任何propsstate的改變,但是子組件依然不停的進行re-render!這跟文章開頭給出的React官網(wǎng)的引用好像背道而馳!對于該問題,本人還不能作出很好的回答,于是在stackoverflow上放出了問題,等待高人解答吧。但目前可以明確的一點是:當父組件進行重新渲染操作時,即使子組件的propsstate沒有做出任何改變,也會同樣進行重新渲染。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 作為一個合格的開發(fā)者,不要只滿足于編寫了可以運行的代碼。而要了解代碼背后的工作原理;不要只滿足于自己的程序...
    六個周閱讀 8,679評論 1 33
  • 說在前面 關(guān)于 react 的總結(jié)過去半年就一直碎碎念著要搞起來,各(wo)種(tai)原(lan)因(le)。心...
    陳嘻嘻啊閱讀 7,035評論 7 41
  • 3. JSX JSX是對JavaScript語言的一個擴展語法, 用于生產(chǎn)React“元素”,建議在描述UI的時候...
    pixels閱讀 2,979評論 0 24
  • 生命周期流程圖簡單如下: 組件讓你把用戶界面分成獨立的,可重復使用的部分,并且將每個部分分開考慮。React.Co...
    Simple_Learn閱讀 1,191評論 0 0
  • 原教程內(nèi)容詳見精益 React 學習指南,這只是我在學習過程中的一些閱讀筆記,個人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,945評論 1 18

友情鏈接更多精彩內(nèi)容