函数CollectionRefernce.doc()要求其第一个参数为字符串类型

时间:2018-07-26 16:38:13

标签: javascript react-native google-cloud-firestore

我正在研究React-native和Firestore。要在Firestore中添加数据,以下是代码:

    componentWillMount() {

      AsyncStorage.getItem("logid").then((value) => {
            this.setState({"logid":JSON.parse(value) });
        }).done();

        firebase.firestore().collection('mainmhealthdata').doc(this.state.logid).set({
          insta: 0
        })

我将logid存储在AsyncStorage中,并将其放入componentWillMount()的另一个屏幕中。上面的用于firestore的代码仅在单击事件上能正常工作,但对于本机响应生命周期组件则无法正常工作,并且会发生以下错误:

Firestore error

在Firestore文档中,doc(“ LA”)静态传递db.collection("cities").doc("LA").set({ name: "Los Angeles", state: "CA", country: "USA" })

如何将这些静态数据发送到动态文档ID?

2 个答案:

答案 0 :(得分:0)

setState调用是异步的,另请参见React documentation for setState。到您尝试使用状态写入文档时,它还没有传播。

最简单的解决方法是仅使用相同的值来查找文档:

firebase.firestore().collection('mainmhealthdata').doc(JSON.parse(value)).set({
  insta: 0
})

答案 1 :(得分:0)

我已经通过使用异步/等待方法解决了问题

async componentDidMount() {
const res = await AsyncStorage.getItem("LoginId")
console.log("result in calbmi is",res)
var parres= JSON.parse(res)
firebase.firestore().collection('mainmhealthdata').doc(parres).set({
  insta: 0
},{merge: true})

}