为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码中 setState 工作方式的混乱

这段代码中 setState 工作方式的混乱

MMTTMM 2021-09-30 13:58:23
我是 React 的新手,正在学习 setState 的工作原理。所以,你可以看到下面的代码:class Counter extends React.Component {  constructor(props) {    super(props);    this.handleReset = this.handleReset.bind(this);    this.state = {      count: 5    };  } handleReset() {    this.setState({count:0})this.setState({count:this.state.count+1})}render() {    return (      <div>        <button onClick={this.handleReset}>reset</button>      </div>    );  }所以,我从上面的代码中期望的是,当我点击按钮时,它不是输出 1,而是将 1 添加到计数的当前状态并显示 6。这就是我假设 setStates 在 handleReset 方法中工作的方式。我不知道为什么它呈现 6 而不是 1
查看完整描述

2 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

setState可以将更新程序函数作为参数。在这种情况下,该函数将传递前一个状态,并且您返回一个更改对象,该对象将通知下一个状态。

文档甚至直接提到了这一点。

setState()并不总是立即更新组件。它可能会批量更新或推迟更新。这使得this.state 在调用setState()潜在陷阱后立即阅读。相反,使用 componentDidUpdatesetState回调(setState(updater,callback)),保证在应用更新后触发。如果您需要根据之前的状态设置状态,请阅读 [在文档中]的 updater 参数。

所以而不是:

this.setState({ count: this.state.count + 1});

...你可以做:

this.setState((prevState) => ({ count: prevState.count + 1 }))

有关更多信息,另请参阅学习反应文章


查看完整回答
反对 回复 2021-09-30
  • 2 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信