javascript - 无法在 Firestore 中设置状态添加承诺
问题描述
在这里不知所措。我已经尝试了很多变体,但基本上我试图将 uploadRefId 的状态设置为创建新集合后返回的 id。我可以看到 id 是通过 console.log 生成的,但是 setState 函数似乎在这个承诺的范围内不起作用(uploadRefId 为空)?
const [uploadRefId, setUploadRefId] = React.useState(null);
let uploadRefCol = await firestore.collection("uploads");
await uploadRefCol.add(uploadData)
.then( (uploadDataRef) => {
console.log('uploadDataRef.id: ', uploadDataRef.id);
setUploadRefId(uploadDataRef.id);
console.log('uploadRefId', uploadRefId);
})
.catch( (error) => {
console.log('Error!', error)
});
解决方案
setUploadRefId(uploadDataRef.id);
以上是异步更新状态,因此如果您立即使用状态值,则该值尚未设置,您正在尝试访问该值
useEffect(() => {
console.log('uploadRefId', uploadRefId);
})
因此,上述使用效果在状态的每次更新上运行,您可以注意任何状态变化
推荐阅读
- anylogic - 连接来自不同进程的 2 个源
- c# - 如何将 JSON 动态内容读入对象?
- mysql - 如何根据其明细表的最大记录行数据从主表中选择所有数据
- angular - 在页面上以与数据库中不同的顺序显示数据
- postgresql - 只能将 pgadmin 连接到端口 5432 上的 postgres docker 容器,而不能连接任何其他端口?
- c++ - 在 3ds Max 中更新进度条后,环境和效果 UI 不刷新
- c# - System.FormatException if use new CultureInfo("id-ID") - 印度尼西亚文化
- sql-server - 视图不允许空值
- ldap - DirectoryEntry 实例未在 LDAP 中配置
- laravel - 获取有多少用户查看了 Android 应用程序的通知 laravel API