我似乎有问题将数据推入一个状态数组。 我正试图以这种方式实现它:

this.setState({ myArray: this.state.myArray.push('new value') })

但我相信这是不正确的方式,并导致问题的可变性?


当前回答

你破坏了React的原则,你应该克隆旧的状态,然后将其与新数据合并,你不应该直接操纵你的状态, 你的代码应该是这样的

fetch (http://localhost: 8080”)。然后(response => response.json)。然后(json ={这个setState ({mystate ...这个state university)。我的状态,杰森]

其他回答

这条准则对我很有用:

fetch('http://localhost:8080')
  .then(response => response.json())
  .then(json => {
  this.setState({mystate: this.state.mystate.push.apply(this.state.mystate, json)})
})

你根本不应该管理这个国家。至少,不是直接的。如果你想要更新你的数组,你会想要这样做。

var newStateArray = this.state.myArray.slice();
newStateArray.push('new value');
this.setState(myArray: newStateArray);

直接处理状态对象是不可取的。你也可以看看React的不可变性帮助。

https://facebook.github.io/react/docs/update.html

你破坏了React的原则,你应该克隆旧的状态,然后将其与新数据合并,你不应该直接操纵你的状态, 你的代码应该是这样的

fetch (http://localhost: 8080”)。然后(response => response.json)。然后(json ={这个setState ({mystate ...这个state university)。我的状态,杰森]

我想现在回答这个问题有点晚了,但对于那些新来的人来说

你可以使用这个叫做immer的小包

请看这个例子:https://immerjs.github.io/immer/produce

在这里,您不能像这样将对象推到状态数组中。你可以用普通数组来推。 这里你需要设置状态,

this.setState({ 
     myArray: [...this.state.myArray, 'new value'] 
})