【发布时间】:2023-02-16 22:23:04
【问题描述】:
我有一个状态,它是一个字符串数组,包含收到的所有消息。还有一个在收到新消息时触发的 useEffect。 因此,我尝试使用 set state 将新消息附加到留言板,但它会生成一个 starnge 结果。
最初的想法:像往常一样将内容传播到州。
useEffect(() => {
socket.on("recive_message", (data) => {
setBoard((chats) => [data.message, ...chats])
})
}, [])
但这种方式没有附加,聊天板第一个元素被传入消息替换..于是尝试了网上看到的另一种方式:
useEffect(() => {
socket.on("recive_message", (data) => {
setBoard([data.message, ...board])
})
}, [])
这很好用。 这两种语法有什么区别?
【问题讨论】:
-
使用回调形式允许您使用状态中的先前值,即使先前值尚未呈现。这里是完整的答案:stackoverflow.com/a/64361392/11528064
-
我明白了,但是是因为我们在 useState 挂钩中吗?
标签: reactjs react-hooks socket.io