我正在尝试根据用户登录从 firestore 获取每个用户数据,在我使用 React Native 和 firebase 之间。
获取代码
const UserInbox = () => {
const auth = getAuth(app)
const messages = query(collection(db, "feedback"), where("reciepent","==", userData? auth.currentUser.email:'unknown'))
const [userData, setUserData] = useState([])
const [messageText,setMessageText]=useState("")
const fetchData = async()=>{
const unsubscribe = auth.onAuthStateChanged(async user => {
const list = [];
if(user){
await getDocs(messages)
.then((querySnapshot) => {
querySnapshot.forEach((doc) => {
const {userId,recipient,messageText} = doc.data()
list.push({
id:doc.id,
userId,
recipient,
messageText
})
// doc.data() is never undefined for query doc snapshots
console.log(doc.data());
setUserData(list)
});
})
} else{
setUserData(null)
}
})
return () => unsubscribe();
}
当我更换这条线时:
const messages = query(collection(db, "feedback"), where("email","==", userData? auth.currentUser.email:'unknown'))
有了这个
const messages = query(collection(db, "feedback"), where("city", "==", "CA"))
代码正在根据条件工作和获取,但是当我根据当前用户登录更改
where
条件时,我只得到空白屏幕,没有任何内容检索。
当我更换这条线时:
const messages = query(collection(db, "feedback"), where("email","==", userData? auth.currentUser.email:'unknown'))
与:
const messages = query(collection(db, "feedback"), where("city", "==", "CA"))
代码正在根据条件工作和获取,但是当我根据当前用户登录更改where条件时,我只得到一个空白屏幕,没有检索到任何内容。
您得到的是预期的行为。当您使用时:
const messages = query(collection(db, "feedback"), where("city", "==", "CA"))
它之所以有效,是因为共享的文档包含一个名为
city
的字段,该字段保存 CA
的值:
因此第一个查询不起作用,因为文档中不存在
email
字段,而只有包含电子邮件地址的 recipient
字段。因此,您可以更改查询以使用 recipient
字段:
const messages = query(collection(db, "feedback"), where("recipient","==", userData? auth.currentUser.email:'unknown'))
// 👆
或者您在文档中添加一个新的
email
字段,其中包含经过身份验证的用户的电子邮件。
如果文档的ID是UID,那么读取文档的一种更简单的方法是创建一个直接指向文档的文档引用,而不执行查询。