我正在尝试使用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子句不适用于状态变量
答案 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时,状态。
您需要在此处提供完整的代码,以便我们查看。