在设置状态之前反应状态分配

时间:2016-09-10 07:50:03

标签: javascript object reactjs variable-assignment state

我是React的新手,我正在按照在线教程进行操作。教师将下面的代码作为Todo应用程序的一部分。这是向todo添加新state项(对象)的逻辑。

var TodoApp = React.createClass({
  getInitialState: function() {
    return {
      todos: {}
    };
  },
  addTodo: function(todo) { 
    var timestamp = (new Date()).getTime();
    this.state.todos[`todo-${timestamp}`] = todo;
    this.setState({
      todos: this.state.todos
    });
  }
});

1。在这种情况下,在调用todo之前将this.setState()对象分配给状态是一种好习惯吗? (这SO question提供了一些相关信息。)
2。最好将todos传播到下面?
3。或者,是否有更好的方法可以在此设置中更新state

var TodoApp = React.createClass({
  getInitialState: function() {
    return {
      todos: {}
    };
  },
  addTodo: function(todo) { 
    var timestamp = (new Date()).getTime();
    this.setState({
      todos: {...this.state.todos, [`todo-${timestamp}`]: todo}
    });
  }
});

1 个答案:

答案 0 :(得分:1)

  1. 不,请参阅下面的示例&文档。

    this.state.todos = ...
     // Someone modifies todo's state at this point
     this.setState({
       todos: this.state.todos // this would not do what you expected anymore
     });
    
  2.   

    不要直接改变this.state,因为之后调用setState()可能   替换你做的突变

    React's documentation

    1. 当然,这就是React方式。这是一个完美的解决方案。
    2. 传播已经足够了。