Firebase.db.collection 不是函数 || Firebase v9 || 将集合文档设置为状态时抛出错误
2021-12-17
1489
我正在使用 Firebase v9 开发一个 Expo React Native 项目。出于某种原因,我能够在 Firestore 中监听“chats”集合并成功将它们 console.log 或设置为变量,但是当我尝试将它们设置为某个状态时,我收到此错误:
“TypeError:_firebase.db.collection 不是函数。(在 '_firebase.db.collection("chats")' 中,'_firebase.db.collection' 未定义)”
例如,此 useEffect 正确地将我想要的对象数组打印到控制台:
useEffect(
() =>
onSnapshot(collection(db, "chats"), (snapshot) =>
console.log(
snapshot.docs.map((doc) => ({
id: doc.id,
data: doc.data(),
}))
)
),
[]
);
但是,当我将 console.log 换成 setChats 时,我收到上述错误。
useEffect(
() =>
onSnapshot(collection(db, "chats"), (snapshot) =>
setChats(
snapshot.docs.map((doc) => ({
id: doc.id,
data: doc.data(),
}))
)
),
[]
);
我也正确地从 React 导入了 useState。我还可以将这些快照文档设置为变量,但如果我尝试使用该变量设置状态(即:setChats(myVar);),我会收到此错误。
我已经被这个问题困扰了好几个小时,无论如何也不明白为什么我会收到这个错误。有什么想法吗?谢谢!🙏
2个回答
也许可以尝试初始化一个空数组并将文档推送到其中。然后设置Chats(数组)。类似这样的操作...
useEffect(
const data = []
() =>
onSnapshot(collection(db, "chats"), (snapshot) =>
snapshot.docs.map((doc) => ({
data.push({id: doc.id,
data: doc.data(),})
})
setChats(data)
)
),
[]
);
Olly
2021-12-17
将数据推送到数组然后进入使用状态对我来说是可行的
useEffect(() => {
const q = query(collection(db, 'posts'))
onSnapshot(q, (querySnapshot) => {
const posts = []
querySnapshot.forEach((doc) => {
posts.push({ id: doc.id, data: doc.data() })
})
setPosts(posts)
})
}, [])
Zubair Kamboh
2021-12-17