2016-03-09 69 views
2

我有道具,我想在狀態Reactjs @setState與動態密鑰值

@setState 
    key: val 
    values: 
    another_key: value 
    @props.data.option: @props.data.value 

發送一個動態的對象,但是這樣是不行的,我發現這個解決方案:

newState = {} 
    newState[@props.data.option] = @props.data.value 
    this.setState(newState); 

但是這樣設置的狀態右邊的值

+1

你爲什麼要通過存儲在''state' props'傳遞中的一個項目?如果'props.data.value'是你的唯一真相源,爲什麼不在你的'render()'函數中使用它,或者你需要這些信息的地方? –

回答

3

的這裏的問題是,你正在處理狀態嵌套的對象,當它似乎只WA整個對象values被替換nt更新values對象中的鍵的子集。最好的方法是通過set操作使用React的不變性助手。 (https://facebook.github.io/react/docs/update.html)。使用ES6

,你可以設置一個動態密鑰:

var update = require('react-addons-update'); 

var newState = update(this.state, { 
    values: {[dynamic_key]: {$set: dynamic_value}} 
}); 

this.setState(newState); 
+0

如果我以這種方式使用: 'var newState = update(this.state,{ values:{[props.data.option]:{$ set:@ props.data.value}} }); ' 我得到這個錯誤:'SyntaxError:[stdin]:200:17:unexpected [ ' – Meldum

+0

我使用ECMAScript 2015中的對象初始值設定語法(https://developer.mozilla.org/en-US/docs /網絡/的JavaScript /參考/運營/ Object_initializer)。您用於轉儲反應代碼的工具可能不支持此語法。 – Mark

+0

我還建議你注意上述Calvin Belden提出的問題,因爲從道具設置狀態一般被認爲是不好的做法。 – Mark