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

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

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


当前回答

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

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

其他回答

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

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

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

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

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

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

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


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

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

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

数组push返回长度

this.state.myArray。push('new value')返回扩展数组的长度,而不是数组本身。array .prototype.push()

我猜您希望返回值是数组。

不变性

这似乎是React的行为:

千万不要变异。直接调用setState() 替换您所做的突变。对待这个问题。就像它是那样的状态 immutable.React.Component。

我猜,你会这样做(不熟悉React):

var joined = this.state.myArray.concat('new value');
this.setState({ myArray: joined })