我有一个问题如下:
我正在通过useEffect函数检索我的firestore文档,它工作得很好。现在我正在检索所有“profiles”文档(此时有3个)。但现在我只想检索文档,其中字段“workerProfile”为true。我有2个文档为false,1个文档为true,所以它应该只显示一个包含1个文档的数组。
当在firebase控制台中手动这样做时,它正在工作。
下面是我的useEffect函数与,where('workerProfile', '==', true)
,这是不工作,但也没有给出任何错误。
useEffect(() => {
const getProfiles = async () => {
const querySnapshot = await getDocs(collection(fireDb, "profiles"),where('workerProfile', '==', true))
console.log(querySnapshot, "CHECK OUT")
setProfiles(querySnapshot.docs.map(doc => {
return {
id: doc.id,
data: {
userProfileUrl: doc.data().userProfileUrl,
displayName: doc.data().displayName,
likesCount: doc.data().likesCount,
bio: doc.data().bio
}
}
}))
}
getProfiles()
}, [])
但我的console.log(querySnapshot, "CHECK OUT")
仍然显示所有3个配置文件,而不是只显示1个。
我已经试着从firebase文档中找到一些提示,但是我仍然不知道,为什么它不工作。也许我在这里错过了什么?
如果有人能在这里帮我我会非常感激的,因为这已经开始让我很恼火了。
我和
- 防火墙9.14.0
- 防火墙管理^11.2.1
- firebase函数^4.0.2
- 下一版本13.0.2
- React:18.2.0
以下是我的完整上下文文件,以获取更多信息:
import { createContext, useEffect, useState, useContext } from "react"
import { collection, getDocs, getDoc, doc, where, query, setDoc } from "firebase/firestore"
import { fireDb } from "../../firebaseClient"
const FantsyContext = createContext()
const FantsyProvider = ({ children }) => {
const [users, setUsers] = useState([])
const [currentLoggedUser, setCurrentUser] = useState([])
const [profiles, setProfiles] = useState([])
// GET USERS
useEffect(() => {
const getUsers = async () => {
const querySnapshot = await getDocs(collection(fireDb, "users"))
setUsers(querySnapshot.docs.map(doc => {
return {
id: doc.id,
data: {
...doc.data()
}
}
}))
}
getUsers()
}, [])
// GET PROFILES
useEffect(() => {
const getProfiles = async () => {
const querySnapshot = await getDocs(collection(fireDb, "profiles"),where('workerProfile', '==', true))
console.log(querySnapshot, "CHECK OUT")
setProfiles(querySnapshot.docs.map(doc => {
return {
id: doc.id,
data: {
userProfileUrl: doc.data().userProfileUrl,
displayName: doc.data().displayName,
likesCount: doc.data().likesCount,
bio: doc.data().bio
}
}
}))
}
getProfiles()
}, [])
return (
<FantsyContext.Provider
value={{ profiles, users }}
>{children}</FantsyContext.Provider>
)
}
export { FantsyContext, FantsyProvider }
1条答案
按热度按时间3zwjbxry1#
尝试
我认为您刚刚使用了
getDocs(collection(<ref>, <collection name>))
,因此getDocs()
函数忽略了其余参数(where()
查询)。因此,在
getDocs()
中使用query()
函数。