为什么 firestore where 子句与 state 不起作用?

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

        })


    })

})

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


编辑我甚至试过了,它正在成真。然而,where 子句不适用于状态变量console.log(this.state.currentUser==='test@test.com')


月关宝盒
浏览 90回答 2
2回答

慕尼黑5688855

可能是状态变量有问题,如异步效应或任何其他可能的原因。setState确保状态变量具有值。为了保证安全,请在以下条件下运行此函数:currentUserifif(this.state.currentUser){ firebase.firestore().collection('Partners')     .where("Email",'==',this.state.currentUser).get().then( querySnapshot => {       querySnapshot.forEach(doc => {         this.setState({           Theatre:doc.data().Theatre         })     }) })}对于调试,请尝试通过控制台记录它。

RISEBY

React 状态是异步的,您确实会在控制台中获取状态值,但是当运行 firestore 查询时,因为它也是异步的,因此您的状态以某种方式被覆盖,或者您的页面正在刷新并再次设置状态。我遇到了同样的问题,然后我检查了我的页面是否被刷新,并且即使我在控制台中获得了它,我也丢失了我设置的状态.log(),但是当我的消防商店运行查询时,那里没有状态。您需要在此处提供完整的代码,以便我们查看它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript