首页 > 解决方案 > 无法在 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)
});

标签: javascriptreactjsfirebasegoogle-cloud-firestore

解决方案


setUploadRefId(uploadDataRef.id);

以上是异步更新状态,因此如果您立即使用状态值,则该值尚未设置,您正在尝试访问该值

  useEffect(() => {
 console.log('uploadRefId', uploadRefId);
})

因此,上述使用效果在状态的每次更新上运行,您可以注意任何状态变化

代码沙箱示例


推荐阅读