2015-05-25 35 views
1

我很難理解如何更新狀態作出反應 - > $推動和$不印字..陣營更新鬥爭

我的狀態是這樣的:data = { 2: [1, 2, 3], 7: [5, 3, 4] }

,我需要更新記錄可變特定對象鍵並刪除或添加元素到數組..我已經試過類似:

var elem_id = this.props.elem_id; var newArray = update(data, {elem_id: {$push: [4]}}); var newArray = update(data, {elem_id: {$unshift: [4]}});

但不成功我在做什麼錯?

由於

+0

'數據[elem_id] .push(4);'? – Viacheslav

+0

這個數據是一個狀態 –

+0

var data = this.state.data;數據[elem_id] .push(4); this.setState({data:data});' – Viacheslav

回答

1
var newArray = update(data, {elem_id: {$push: [4]}}); 

將嘗試在字面鍵elem_id4到陣列;也就是說,elem_id是對象文字鍵,並且是而不是變量elem_id的內容替換。

如果你使用的是支持ES6的計算性能語法transpiler(如Babel),你可以做到以下幾點:

var newArray = update(data, {[elem_id]: {$push: [4]}}); 

如果你沒有,你必須創建的對象,然後設置操作:

var toUpdate = {}; 
toUpdate[elem_id] = {$push: [4]}; 
var newArray = update(data, toUpdate); 
+1

請注意,這不適用於標準的JSX變壓器。 – Ray

+1

這是正確的,JSX轉換器不支持計算屬性,但[JSTransform已被棄用](http://facebook.github.io/react/blog/2015/06/12/deprecating-jstransform-and-react -tools.html)無論如何都支持其他工具(如Babel)。 –