setState 异步更新
setState updates asynchronously
我指的是下面的评论:https://reactjs.org/docs/state-and-lifecycle.html
状态更新可能是异步的
React 可以将多个 setState() 调用批处理到单个更新中以提高性能。
因为 this.props 和 this.state 可能会异步更新,所以您不应该依赖它们的值来计算下一个状态。
例如,这段代码可能无法更新计数器:
// Wrong
this.setState({
counter: this.state.counter + this.props.increment,
});
要修复它,请使用接受函数而非对象的第二种形式的 setState()。该函数将接收先前的状态作为第一个参数,应用更新时的道具作为第二个参数:
// Correct
this.setState((state, props) => ({
counter: state.counter + props.increment
}));
我不太清楚这是什么意思。我发现这些例子令人困惑。
所以我想出了一个自己的例子。
如果我对上面的评论理解正确,那么下面的不正确?
const [var, set_var] = useState(false);
...
set_var(!var)
我正在尝试使用当前状态的值设置新状态。
根据教程,这不正确?
它是正确的,但在某些情况下它可能不会像您预期的那样工作。
比如你用了两次
const [var, set_var] = useState(false);
set_var(!var);
set_var(!var);
你希望它变成 false
->true
->false
吗?因为它不会。它会去 false
->true
->true
因为在第二次调用中 var
不会被更新,所以它会再次使用 !false
.
使用回调形式,它将在回调执行时使用变量的当前值,它将按预期工作。
set_var( prevVar => !prevVar )
set_var( prevVar => !prevVar )
这确实改了两次,又结束到false
我指的是下面的评论:https://reactjs.org/docs/state-and-lifecycle.html
状态更新可能是异步的
React 可以将多个 setState() 调用批处理到单个更新中以提高性能。
因为 this.props 和 this.state 可能会异步更新,所以您不应该依赖它们的值来计算下一个状态。
例如,这段代码可能无法更新计数器:
// Wrong
this.setState({
counter: this.state.counter + this.props.increment,
});
要修复它,请使用接受函数而非对象的第二种形式的 setState()。该函数将接收先前的状态作为第一个参数,应用更新时的道具作为第二个参数:
// Correct
this.setState((state, props) => ({
counter: state.counter + props.increment
}));
我不太清楚这是什么意思。我发现这些例子令人困惑。
所以我想出了一个自己的例子。
如果我对上面的评论理解正确,那么下面的不正确?
const [var, set_var] = useState(false);
...
set_var(!var)
我正在尝试使用当前状态的值设置新状态。
根据教程,这不正确?
它是正确的,但在某些情况下它可能不会像您预期的那样工作。
比如你用了两次
const [var, set_var] = useState(false);
set_var(!var);
set_var(!var);
你希望它变成 false
->true
->false
吗?因为它不会。它会去 false
->true
->true
因为在第二次调用中 var
不会被更新,所以它会再次使用 !false
.
使用回调形式,它将在回调执行时使用变量的当前值,它将按预期工作。
set_var( prevVar => !prevVar )
set_var( prevVar => !prevVar )
这确实改了两次,又结束到false