2015-05-25 36 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)。 –