为什么firestore where子句不适用于状态?

时间:2020-05-14 21:06:54

标签: javascript reactjs google-cloud-firestore where-clause

我正在尝试使用react js中的where子句从firestore中过滤文档。但是,当我在where子句中使用状态变量时,它不起作用,但是当我提供实际字符串时,它开始起作用

不起作用

firebase.firestore().collection('Partners')
    .where("Email",'==',this.state.currentUser).get().then( querySnapshot => {
      querySnapshot.forEach(doc => {

        this.setState({
          Theatre:doc.data().Theatre
        })

    })
})

工作

firebase.firestore().collection('Partners')
    .where("Email",'==',"test@test.com").get().then( querySnapshot => {
      querySnapshot.forEach(doc => {

        this.setState({
          Theatre:doc.data().Theatre
        })

    })
})

任何帮助将不胜感激。谢谢。

编辑 我什至尝试了console.log(this.state.currentUser==='test@test.com'),它实现了。但是where子句不适用于状态变量

2 个答案:

答案 0 :(得分:0)

状态变量可能是问题所在,例如setState的异步效果或任何其他可能的原因。

确保状态变量currentUser有一个值。为了安全起见,请在if条件下运行此功能:

if(this.state.currentUser){
 firebase.firestore().collection('Partners')
     .where("Email",'==',this.state.currentUser).get().then( querySnapshot => {
       querySnapshot.forEach(doc => {

         this.setState({
           Theatre:doc.data().Theatre
         })

     })
 })
}

要进行调试,请尝试通过控制台对其进行记录。

答案 1 :(得分:0)

反应状态是异步的,但您确实会在控制台中获得状态值,但是到运行Firestore查询时,因为它也是异步的,因此您的状态以某种方式被覆盖,或者您的页面正在刷新并且状态被重新设置。

我遇到了同样的问题,然后我检查了页面的刷新情况,即使我将其保存在console.log()中,我也失去了设置的状态,但是到了我运行查询的firestore时,状态。

您需要在此处提供完整的代码,以便我们查看。