reactjs - React setState 和 Promise 中的竞争条件
问题描述
在我的上下文中,我有一个LocalFunction
返回承诺。
LocalFunction: () => Promise<void>
LocalFunction: () => {
return externalCall.getBooks().then((books) => {
this.setState({ Books: books })
})
}
Books
我可以根据上下文状态中的更新对象在另一个组件中调用此函数,例如:
this.props.LocalFunction().then(() => {
// do something with this.props.Context.Books
})
但我知道 React 会批量更新状态。Books
那么在没有用新书更新状态的情况下调用 LocalFunction 时我会遇到竞争情况吗?
我知道避免它的一种方法是将 LocalFunction 包装在一个新的 Promise 中并解决它this.setState({ Books: books }, resolve)
,但如果可能的话,我想避免这样做。
解决方案
如何使用 async/await?
LocalFunction: async (needUpdate = false) => {
const result = await externalCall.getBooks();
if(needUpdate){
this.setState({ Books: result })
}
return result;
}
this.props.LocalFunction().then((res) => {
console.log(res)
// do something with this.props.Context.Books
})
当你需要更新状态时
LocalFunction(true)
推荐阅读
- google-app-engine - 如何将我的域映射到 Google Cloud Shell 的预览服务器 (...-dot-devshell.appspot.com)
- r - 根据 2 个条件将一列拆分为多列
- javascript - JavaScript Datatable.JS / PHP MySQLi 排序问题
- architecture - Flutter:作用域模型以及如何决定在文件中放入什么和多少
- api - 响应谱 - 如何从网站获取数据
- excel - 复制最后一个弹出窗口的内容
- android - 如何修复布局?
- razor - 寻找在没有任何 Web 服务器的控制台应用程序中呈现 Razor cshtml 页面的最简单选项
- real-time - RTEMS Source Builder - Set Builder, 5 (f07d2b6e9ad7) error: exe: not found: (__xz) xz error: host build environment is not set correct
- linux - 检查已经运行的进程是否在 Linux 上重定向了标准输入?