【发布时间】:2019-10-26 10:02:51
【问题描述】:
我已经通过票证轮询反应应用程序(票证是 websocket 连接链接的一部分)。然后我将 websocket 对象传递给另一个组件,因为只有这个(另一个)组件应该使 .send()
用户登录或注销后,我需要为新连接获取新票,因为服务器具有登录用户的专用数据。
我应该如何组织我的代码来完成这个任务?
我尝试在登录/注销后重新分配 ws 对象,但得到“每次渲染后从 React Hook 内部分配给 'ws' 变量的分配”错误 我无法将 ws 赋值存储在 useEffect 挂钩中,因为这样我就无法将其作为道具传递 正如你所见,我虽然在使用 Redux
const App = () => {
const { ticket, isLoggedIn } = useSelector(state => state);
const dispatch = useDispatch();
useEffect(() => {
const requestTicket = () => {
fetch('http://some/api/websocket', {
method: 'POST'
})
.then(response => response.json())
.then(ticket => {
dispatch(setTicket(ticket));
});
};
requestTicket();
}, [dispatch]);
let ws = new WebSocket('ws://socket/' + ticket);
useEffect(() => {
fetch('http://some/api/websocket', {
method: 'POST'
})
.then(response => response.json())
.then(ticket => {
ws = new WebSocket('ws://socket/' + ticket);
});
}, [isLoggedIn, ws]);
ws.onmessage = e => {
dispatch(setData(JSON.parse(e.data)));
};
return <Child ws={ws} />;
};
【问题讨论】:
标签: javascript reactjs redux websocket react-hooks