我正在使用 Firebase v9 開發一個 Expo React Native 專案。出于某種原因,我能夠在 Firestore 中收聽“聊天”集合并成功通過控制臺記錄它們或將它們設定為變數,但是一旦我嘗試將它們設定為某個狀態,我就會收到此錯誤:
“型別錯誤:_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);),則會出現此錯誤。
我已經被困在這個問題上好幾個小時了,終其一生都無法理解為什么我會收到這個錯誤。有任何想法嗎?謝謝!??
uj5u.com熱心網友回復:
也許嘗試初始化一個空陣列并將您的檔案推送到它。然后 setChats(array)。像這樣的東西...
useEffect(
const data = []
() =>
onSnapshot(collection(db, "chats"), (snapshot) =>
snapshot.docs.map((doc) => ({
data.push({id: doc.id,
data: doc.data(),})
})
setChats(data)
)
),
[]
);
uj5u.com熱心網友回復:
將資料推入陣列然后進入使用狀態對我有用
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)
})
}, [])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/385228.html
上一篇:如何添加身份驗證自定義宣告
