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

IT技术 javascript reactjs google-cloud-firestore where-clause
2021-04-28 06:53:39

我正在尝试使用 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个回答

可能是您的状态变量的问题,例如异步影响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
         })

     })
 })
}

为了调试,尝试控制台记录它。

React 状态是异步的,您确实在控制台中获得了一个状态值,但是在运行 firestore 查询时,因为它也是异步的,您的状态以某种方式被覆盖,或者您的页面正在刷新并且状态正在再次设置。

我遇到了同样的问题,然后我检查了我的页面是否正在刷新并且我正在丢失我设置的状态,即使我确实在 console.log() 中找到了它,但是当我运行查询的 Firestore 没有状态时。

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