gpt4 book ai didi

javascript - 以这种方式覆盖 React 状态数组好吗?

转载 作者:行者123 更新时间:2023-11-28 11:09:14 25 4
gpt4 key购买 nike

请注意,这不是一个重复的问题。我的问题是,如果我将状态数组分配给局部变量并将值推送到局部变量,是否会导致错误。

我陷入了一种情况,需要了解将值插入 React 状态数组或覆盖这些值时哪个是正确的。

根据 React 文档,下面的代码是一种不好的风格并会导致错误

   this.state = {
list: []
}

componentDidMount(){
const { list } = this.state;
list.push(“test”);//this is bad style of pushing values into React state and causes a bug
this.setState({list});
}

如果我像下面那样操作,会导致错误吗?将状态列表分配给局部变量并将值推送到该局部变量并将数组状态设置为列表。这和上面的代码一样吗?

  this.state = {
list: []
}
componentDidMount(){
const { list } = this.state;
const array = list;
array.push(“test”); //pushing values to a local variable too a bad style and causes a bug in React?
this.setState({list: array});
}

最佳答案

是的,你的第二种方法也会导致错误,因为状态数组会在这个阶段更新{ array.push(“test”); }。如果你的类是 PureComponent 那么它不会重新渲染。

所以你可以试试这个

 const list = [... this.state.list];

或者

 const list = this.state.list.slice();

这样它就创建了数组的副本。

您的新代码将如下所示:-

const list = [... this.state.list];
list.push("new value");
this.setState({ list });

关于javascript - 以这种方式覆盖 React 状态数组好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52887234/

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