根据docs页的解释:

setState()不会立即改变这一点.创建一个挂起状态,但创建一个挂起状态.访问这个.调用此方法后的状态可能会返回现有值.

无法保证对setState调用的同步操作,并且可能会对调用进行批处理以提高性能.

因此,由于setState()是异步的,因此无法保证其同步性能.有没有一个setState()的 Select 是同步的.

例如

//initial value of cnt:0
this.setState({cnt:this.state.cnt+1})
alert(this.state.cnt);    //alert value:0

既然alert是之前的值,那么用setState()给出alert value:1的替代值是什么呢.

关于Stackoverflow的问题很少,类似于这个问题,但我找不到正确答案.

推荐答案

正如您从文档中看到的,没有同步替代方案,原因如下所述是性能提高.

然而,我认为你想在改变状态后执行一项操作,你可以通过以下方式实现:

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
     x: 1
    };
    
    console.log('initial state', this.state);
  }
  
  updateState = () => {
   console.log('changing state');
    this.setState({
      x: 2
    },() => { console.log('new state', this.state); })
  }
  
  render() {
    return (
      <div>
      <button onClick={this.updateState}>Change state</button>
    </div>
    );
   
  }
}

ReactDOM.render(
  <MyComponent />,
  document.getElementById("react")
);
<div id="react"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

Reactjs相关问答推荐

如何通过TEK查询将对象传递到Express后台

NextJs Form不允许我输入任何输入,

使用REACT-RUTER-V6和ZUSTANDreact 中的身份验证

React Router:在没有手动页面刷新的情况下,路由不会更新内容

无法使用Reaction日期选取器和Next.js设置初始日期

警告:遇到两个子元素拥有同一把 keys .键应该是唯一的,以便组件在更新时保持其身份

面临 React 模式中点击外部条件的问题

React 无效的钩子调用:如何避免嵌套钩子?

如何根据用户在react.js中的 Select , Select 多个心形图标?

如何在next.js 13中仅在主页导航栏上隐藏组件?

如何渲染子路径并触发react 路由父加载器?

React:如何设置光标 Select

将 ref 转发到所有页面(路由组件)只是为了将其应用于
并具有跳过导航链接(按钮).有没有更好的办法?

我应该使用 useEffect 来为 React Native Reanimated 的 prop 值变化设置动画吗?

响应式媒体 React Tailwind

当我在其中传递 2 个箭头函数时,为什么我的 onClick 事件不适用于 useState

如何使用 babel 将 SVG 转换为 React 组件?

为什么重新渲染不会影响 setTimeout 的计数?

bootstrap 导航栏切换器在 reactjs 中不起作用

如何在 NavBar 中设置动态标题