2017-04-26 37 views
1

這樣做的含義是什麼?componentWillUpdate - 修改nextProps或nextState是否安全?

class Foo extends React.Component { 
    componentWillUpdate(nextProps, nextState) { 
     nextState.bar = transformSomehow(nextState.foo); 
    } 
} 

我的直覺告訴我,這是錯的,但我還沒有發現任何文件說,nextPropsnextState應該是隻讀的,我也沒有發現任何東西說,這是確定的。

這裏的想法是,我想要一些從狀態的數據sanitized /轉換/修改版本。有可能有很多其他(更好)的方法來做到這一點,但這也是一個可行的選擇?

+0

道具應被視爲只讀:https://facebook.github.io/react/docs/components-and-props.html#props-are-read-only – lux

+0

其實我已經驗證了' nextProps'確實是不可修改的。一些getter/setter魔法。對於'nextState'我不能說。 –

回答

1

我會說這不是一個理想的方法,因爲你試圖改變狀態。您不應該在componentWillUpdate之內調用setState,也不應該在此時嘗試更新狀態對象。這個階段更多地用於動畫,DOM操作等。

如果你想設置一些基於nextState的其他變量,那就去吧。如果你想工作臨時副本的狀態來完成某件事情,一切都很好。但我認爲試圖在此方法中改變狀態與此生命週期方法的預期用法相反。從componentWillUpdate的文檔:

請注意,您不能在此處調用this.setState()。如果您需要更新狀態以響應支柱更改,請改用componentWillReceiveProps()。

+0

同意 - 即使它看起來沒有警告或破壞時,它看起來像一個代碼味道,不應該做。 –