【发布时间】:2020-09-21 20:46:15
【问题描述】:
尝试在 react 功能组件中建立 websocket 连接,并使用钩子更新状态变量,如下所示 [Ref 1]:
export default function foo() {
const [ arr, setArr ] = useState([])
ws = useRef(null)
useEffect( () => {
ws.current = new Websocket('ws://example.com:1234')
ws.current.onmessage = (m) => {
setArr([...arr, m])
})
}, []) // Runs once at mount
}
arr 的状态未被保留。它被覆盖了。
注意我也尝试将arr 传递给效果,就像这样,但这导致了无限循环。 [参考 2]。随着 arr 的更新,效果被调用...
})
}, [arr])
}
举个更具体的例子,取三个 websocket 消息:
['a']
['b']
['c']
更新后每条消息的预期 arr
['a']
['a', 'b']
['a', 'b', 'c']
结果:
['a']
['b']
['c']
为什么arr 不与回调中的setArr 挂钩存储?为什么是空数组?
参考文献
【问题讨论】:
-
抱歉,我在这里找到了这个:stackoverflow.com/questions/60152922/…
标签: javascript reactjs websocket react-hooks state