Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 取消移位是否会改变状态?如何判断状态是否发生了变化(来自工具)?_Javascript_React Native - Fatal编程技术网

Javascript 取消移位是否会改变状态?如何判断状态是否发生了变化(来自工具)?

Javascript 取消移位是否会改变状态?如何判断状态是否发生了变化(来自工具)?,javascript,react-native,Javascript,React Native,我对native和react仍然是新手,因此我在todo应用程序中遵循了这一点,并阅读了以下文章: addNewTodo方法使用unshift,如果我没有弄错的话,它会改变数组/状态吗 有没有更有效的方法在add方法上编写spread? 或者,如果我完全错了,这很好,那么有什么好的方法可以使用react工具来确定状态是否发生了变化(比如维护其他ppl代码) 您可以像这样使用扩展运算符而不是unshift: this.setState({ todos: [ { id

我对native和react仍然是新手,因此我在todo应用程序中遵循了这一点,并阅读了以下文章:

addNewTodo方法使用unshift,如果我没有弄错的话,它会改变数组/状态吗

有没有更有效的方法在add方法上编写spread? 或者,如果我完全错了,这很好,那么有什么好的方法可以使用react工具来确定状态是否发生了变化(比如维护其他ppl代码)


您可以像这样使用扩展运算符而不是
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
中使用它,或者使用spread
this.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
  ]
});