我正在使用react-stomp-hooks包与我的后端建立 websocket stomp 连接。我有一个函数组件,它呈现我定义的某个页面,const stompClient = useStompClient()
在组件安装上我有一个 useEffect(),它应该在第一次渲染后直接通过 stomp 发布。现在的问题是,当我刷新页面时,我定义的 stompClient 未定义,但是在第一次渲染页面时(通过从另一个页面路由),一切正常。确切的 TypeError 是无法读取 undefined 的属性“发布”。我在这里没有看到什么?查看我的代码:
const SomePage = () => {
...
const stompClient = useStompClient();
useEffect(() => {
stompClient.publish({
destination: `/app/some_destination`,
body: 'some-string'
});
...
}, [])
...
}
编辑1:
我认为stompClient
设置为未定义,因为必须在页面刷新时再次设置与后端的连接,并且useEffect
在此设置发生之前调用。所以我需要一种方法来触发stompClient.publish()
唯一的连接建立后,但我不知道如何实现这一点。我最重要<App/>
的组件是将所有内容包装在一个<StompSessionProvider/>
(请参阅链接的包文档)中,但是我如何才能收听这个 StompSessionProvider 的已建立连接?
class App extends Component {
render() {
return (
<div>
<StompSessionProvider
brokerURL={`${getWebsocketDomain()}/websocket`}
debug={STOMP => console.log({STOMP})}
onConnect={() => console.log({STOMP_CONNECT: 'TCP connection successfully established'})}
>
<AppRouter />
</StompSessionProvider>
</div>
);
}
}