gpt4 book ai didi

javascript - setState() : Do not mutate state directly. 使用 setState()

转载 作者:行者123 更新时间:2023-11-30 07:30:46 28 4
gpt4 key购买 nike

我在运行代码时收到以下警告:

Line 48: Do not mutate state directly. Use setState() react/no-direct-mutation-state

这个警告是指这些代码行:

updateDelay(prediction_arr,prediction_dep) {
this.state.chartDataWake = [...this.state.chartDataWake, {wake: this.state.wake===84.73 ? "H" : (this.state.wake===14.78 ? "M" : "L"), delay: prediction_arr}];
this.state.chartDataTurnaround = [...this.state.chartDataTurnaround, {turnaround: this.state.schedTurnd, delay: prediction_arr}];

this.setState({
prediction_arr: prediction_arr,
prediction_dep: prediction_dep,
delay_arr_cat: prediction_arr===0 ? "<15" : (prediction_arr===1 ? "[15; 45]" : ">45")
});
};

我知道我应该将所有声明放在 this.setState({ 中。但是我不清楚我应该如何更改

this.state.chartDataTurnaround = [...this.state.chartDataTurnaround, {turnaround: this.state.schedTurnd, delay: prediction_arr}];

为了能够编译代码。

最佳答案

1- 不要直接使用 setState 改变状态,所以删除前两行。

2- 因为 setState is async并且您正在根据先前的值更新状态,因此使用 updater function,意味着在 setState 中传递一个函数并在该函数中使用 prevState 值。

像这样:

updateDelay(prediction_arr,prediction_dep) {
this.setState(prevState => ({
prediction_arr: prediction_arr,
prediction_dep: prediction_dep,
delay_arr_cat: prediction_arr===0 ? "<15" : (prediction_arr===1 ? "[15; 45]" : ">45"),

chartDataWake: [
...prevState.chartDataWake,
{wake: prevState.wake===84.73 ? "H" : (prevState.wake===14.78 ? "M" : "L"), delay: prediction_arr}
],

chartDataTurnaround: [
...prevState.chartDataTurnaround,
{turnaround: prevState.schedTurnd, delay: prediction_arr}
]
}));
};

关于javascript - setState() : Do not mutate state directly. 使用 setState(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54724995/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com