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

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

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


当前回答

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

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

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

其他回答

用下面的方法可以检查和更新对象

this.setState(prevState => ({
    Chart: this.state.Chart.length !== 0 ? [...prevState.Chart,data[data.length - 1]] : data
}));

React-Native

如果你也想要你的用户界面(例如。ur flatList)是最新的,使用PrevState: 在下面的例子中,如果用户点击按钮,它将添加一个新对象到列表中(包括在模型和UI中)。

data: ['shopping','reading'] // declared in constructor
onPress={() => {this.setState((prevState, props) => {
return {data: [new obj].concat(prevState.data) };
})}}. 

使用react钩子,你可以这样做

const [countryList, setCountries] = useState([]);


setCountries((countryList) => [
        ...countryList,
        "India",
      ]);

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

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

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

你可以使用.concat方法创建包含新数据的数组副本:

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

但是要注意.concat方法在传递数组-[1,2]时的特殊行为。concat(“foo”3,'酒吧')将导致(1、2、“foo”,3,'酒吧']。