Javascript 取消移位是否会改变状态?如何判断状态是否发生了变化(来自工具)?
我对native和react仍然是新手,因此我在todo应用程序中遵循了这一点,并阅读了以下文章:Javascript 取消移位是否会改变状态?如何判断状态是否发生了变化(来自工具)?,javascript,react-native,Javascript,React Native,我对native和react仍然是新手,因此我在todo应用程序中遵循了这一点,并阅读了以下文章: addNewTodo方法使用unshift,如果我没有弄错的话,它会改变数组/状态吗 有没有更有效的方法在add方法上编写spread? 或者,如果我完全错了,这很好,那么有什么好的方法可以使用react工具来确定状态是否发生了变化(比如维护其他ppl代码) 您可以像这样使用扩展运算符而不是unshift: this.setState({ todos: [ { id
您可以像这样使用扩展运算符而不是
unshift
:
this.setState({
todos: [
{
id: this.state.todos.length + 1,
title: this.state.todoInput,
done: false
},
...this.state.todos
]
});
我不知道有什么工具可以让你知道这个状态是否发生了变异。但是,如果您准备使用TypeScript,您可以将状态声明为
readonly
,以防止这种类型的变异。是的,unshift
会变异状态。您可以复制该数组的todos
和unshift
。然后在setState
中使用它,或者使用spreadthis.setState({todos:[…this.state.todos,{id:…,title:…,done:false}],…})
不一定“更有效”。不过,toggleDone
也在变异状态,因为todo.done=!todo.done
@HereticMonkey-unshift
添加到开头,而不是end@madebydavid好的观点;好在这是一个评论而不是答案:)。主要的一点是,它不一定更有效。这很有效。因此,这将添加到结尾“this.setState({todos:[…this.state.todos,{…}]);`而这会添加到开头:`this.setState({…},…this.state.todos]})`
this.setState({
todos: [
{
id: this.state.todos.length + 1,
title: this.state.todoInput,
done: false
},
...this.state.todos
]
});