Javascript 反应更新斗争

Javascript 反应更新斗争,javascript,reactjs,Javascript,Reactjs,我很难理解如何更新React state->$push和$unshift 我的状态看起来像:data={2:[1,2,3],7:[5,3,4]} 我需要用变量更新记录特定的对象键,并将元素删除或添加到该数组中。。我试过这样的方法: var elem_id=this.props.elem_id; var newArray=update(数据,{elem_id:{$push:[4]}); var newArray=update(数据,{elem_id:{$unshift:[4]}); 但没成功我做

我很难理解如何更新React state->$push和$unshift

我的状态看起来像:
data={2:[1,2,3],7:[5,3,4]}

我需要用变量更新记录特定的对象键,并将元素删除或添加到该数组中。。我试过这样的方法:

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

但没成功我做错了什么

谢谢

将尝试按文本键将
4
推到数组上
elem_id
;也就是说,
elem\u id
是一个对象文本键,并且不会被变量
elem\u id
的内容替换

如果您使用的transpiler支持ES6的计算属性语法(如),则可以执行以下操作:

var newArray = update(data, {[elem_id]: {$push: [4]}});
如果没有,则必须创建对象,然后设置操作:

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

data[elem_id].push(4)?此数据是一个状态
var data=This.state.data;数据[elem_id].push(4);this.setState({data:data})和删除和元素?我尝试过使用splice,但它有一些奇怪的行为。注意,这不适用于标准JSX transformer。这是正确的,JSX transformer不支持计算属性,但无论如何都支持其他工具(如Babel)。
var toUpdate = {};
toUpdate[elem_id] = {$push: [4]};
var newArray = update(data, toUpdate);