1. 程式人生 > 其它 >react中父元件state改變,子元件重新整理

react中父元件state改變,子元件重新整理

1.在react專案開發中,難免會遇到在父元件中state之改變,子元件也會有資料改變,

如果對react有一定了解,都知道react中的有props和state

  • props:從元件外傳到元件內的值,只能讀取,不能修改
  • state:是元件內建物件,可以修改其屬性值,並且是動態修改,元件會根據state的值變化而重新整理元件變化的部分.

  因此問題出現了,現在的使用場景是在父元件中state改變了,父元件的實現區域性重新整理,子元件卻沒有絲毫改變,這種情況

就是父元件render初始化的時候子元件子元件也初始化,父元件中state改變,父元件實現重新整理,父元件傳入子元件中的props

也改變了,但是子元件中的state值並沒有改變,所以子元件並沒有重新整理。

  問題找到了,問題就好解決了,在這裡react在元件中提供了一個監聽props改變的方法 componentWillReceiveProps(nextProps: IProps) {}

,也就是props改變,這個方法就會執行一次, nextProps  就是父元件中傳來的引數,我們可以把我們需要動態改變的資料賦值到state物件中,

這樣就可以props改變了。componentWillReceiveProps(nextProps: IProps) {} 立刻監聽到,後把state中的值修改,state修改後元件也會隨之重新整理

2.下面是測試程式碼

  1. 父元件中的程式碼
    <Header
              back={'商品列表'}
              backArrow={true}
              children="上傳商品"
              rightClick={this.save}
              right={
                this.state.updateState === updateState.update
                  ? '儲存'
                  : this.state.updateState === updateState.info && this
    .state.isEdit ? '編輯' : '' } />

      

  2. 子元件中的程式碼
      componentWillReceiveProps(nextProps: IProps) {
        console.log('進來了', nextProps.right)
    
        this.setState({
          right: nextProps.right
        })
      }
  3. 注意事項,在class子元件中需要動態改變的資料需要把state中的值放到放入到render()中

由於研究react框架不久,有許多不足之處,如有大佬路過,希望留言指正一下,謝謝