【发布时间】:2020-06-20 05:52:05
【问题描述】:
假设我们尝试连接 web socket。 web socket服务器发送一些数据来获取代表在线或离线的客户端状态。我试图将这些数据存储到 redux 中(工作正常),但我需要通过覆盖现有对象来立即更改这些状态。我需要一些功能来覆盖我的 redux 商店。到目前为止,我使用下面的 sn-p。
但是:
此代码将对象推送到我的 redux 商店而不是覆盖
const [status, set_status] = useState([]);
useEffect(() => {
const socket = io(ws_api, {
query: `token=${localStorage.getItem("token")}`,
});
socket.on("message", (data) => {
status.map((item) => {
if (item.application === data.application) {
item["status"] = data.status;
} else {
set_status((status) => [...status, data]);
}
});
});
}, []);
useEffect(() => {
get_client_status(status); // redux action
}, [status]);
来自消息套接字的数据结构
{
application: "5ede25f4d3fde1c8a70f0a38"
client: "5ede25f4d3fde1c8a70f0a36"
status: "offline"
}
【问题讨论】:
-
您要在
onMessage回调中更新或添加消息吗? IE。查看并修复共享的代码? -
您是否考虑过将状态改为使用 Object 或 Map 而不是 Array?
标签: javascript reactjs react-hooks react-lifecycle