我是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}
});
}
});
答案 0 :(得分: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
});
不要直接改变this.state,因为之后调用setState()可能 替换你做的突变