【发布时间】:2020-06-05 22:03:03
【问题描述】:
我想更新我的状态,将来自 Firestore onSnapshot 的新消息添加到现有的消息数组中,但在 onSnapshot 中,我只能在订阅完成后访问状态。
const [messages, setMessages] = useState([]);
useEffect(() => {
const ref = firestore()
.collection('Msg_Messages')
return ref.onSnapshot(querySnapshot =>
setMessages(messages => messages.concat(querySnapshot.docs)))
}, [])
当我收到一条消息时,我会收到:
OnMountMessages + lastMessage
而不是
OnMountMessages + allMessagesSinceMount + lastMessage
我猜是因为onSnapshot 创建了他自己的messages 和setMessages 的副本。我能想到的唯一解决方案是使用 Redux 并将状态保留在组件之外,但是还有其他解决方案吗?
【问题讨论】:
-
关于您的猜测 - 听起来很可能。尝试将
(querySnapshot => ...更改为(function (querySnapshot) {...。 -
谢谢,但不幸的是它产生了同样的效果
标签: reactjs firebase google-cloud-firestore react-hooks use-effect