我想将对象推送/添加到状态反应本机(传播不可迭代实例的尝试无效)

Ray*_*der 1 reactjs react-native react-native-android

我想将对象添加到我的状态,我已经搜索解决它,但所有这些都不起作用

this.state = {
   value : {name:'test'}
};
Run Code Online (Sandbox Code Playgroud)

我想在 this.state.value 中添加一个对象 {coordinate:'0,0'}

我试过这个,但我得到了错误:传播不可迭代实例的尝试无效

let floors = [...this.state.value];
floors.push({ coordinate: '0,0'});
this.setState({ value:floors });
Run Code Online (Sandbox Code Playgroud)

我试过这个,但我得到了错误:传播不可迭代实例的尝试无效

this.setState({
   value:[...this.state.value, {coordinate: '0,0'}]
});
Run Code Online (Sandbox Code Playgroud)

我试过这个,但我得到了错误:_this2.state.value.concat is not a function

this.setState( {
   value: this.state.value.concat({koordinat:coor})
});
Run Code Online (Sandbox Code Playgroud)

请帮我解决它

Dav*_*ton 5

您试图将地图展开为数组。

如果你想从一个数组开始,那么改变你的初始状态:

this.state = { value: [{ name: 'test' }] }
Run Code Online (Sandbox Code Playgroud)

然后您可以使用您的原始代码,前两个示例中的任何一个。

由于同样的原因,您的第二个示例失败了。

第三个例子没有意义,你试图concat到一个对象上。


根据注释,原始代码中没有一个真正解决您要执行的操作,即简单地向现有对象添加属性。正如 shogges 指出的那样,这很简单:

this.setState({
  value: { ...this.state.value, coordinate: '0, 0') }
})
Run Code Online (Sandbox Code Playgroud)

这会将现有对象扩展为具有附加属性的新对象。

也就是说:坐标不是字符串,它们是对象。

  • 那么你应该这样做: `this.setState({ value: { ...this.state.value, axis: '0,0' } });` (2认同)