javascript - 在 setState 之后使用 setTimeout 来避免异步问题

标签 javascript reactjs

我经常这样做

this.setState({
something: this.state.something + 1
})

setTimeout(() => { this.props.somefunction(this.state.something) },100);

这甚至是正确的吗?但这至少解决了我的问题。如果我不在这里超时,在我的父组件中声明的 somefunction 将收到一个未定义的参数。我猜 this.props.somefunction() 是在 setState 完成之前执行的?

最佳答案

不,这不是一个好的模式。异步函数应该有一个你可以使用的回调参数,并查看 docs , 有一个。

将您的函数作为 setState 的第二个参数。

this.setState({...}, () => {
    this.props.somefunction(this.state.something);
}

这里使用 setTimeout 不好的原因是你在冒险。你是说,“我不知道这个异步操作需要多长时间,但我预计它不会超过 100 毫秒,所以我要碰碰运气。”但当然,您不知道需要多长时间。

callback 参数确保该函数将在异步操作完成后运行,因此您无需祈祷。

关于javascript - 在 setState 之后使用 setTimeout 来避免异步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44233319/

相关文章:

javascript - 如果在数据表中选择了组合框,则获取数据库

javascript - 如何在 HTML-Canvas 上渲染光线转换的墙壁纹理

javascript - 将 props 从子组件传递到主组件

reactjs - React Router v4 重定向到当前页面并且组件消失

javascript - API 调用在 React 组件内返回 promise 而不是数据

javascript - Protractor 在不使用 browser.sleep 的情况下编写更干净的测试用例

javascript - 为什么 Javascript 对象与其单独的属性不同?

javascript - 从子对象设置父状态(对象)会导致不断重新渲染

javascript - react : how to add a spinner after click, 并在动画完成后更改屏幕

list - 将元素添加到 Map 内的 List (ImmutableJS)