需要在 useEffect 中访问 useState 值,但不能将它放在依赖项 arr 中,因为 socket.io
Need to access useState value within a useEffect, but cant put it in dependency arr because socket.io
我有一个从发送 +1 或 -1 的服务器发出的套接字。 socket.on 必须在 useEffect 中,否则套接字会被调用两次。我不能只将数字 const 放在依赖项数组中,因为每次调用套接字时它都会链接以前的每个调用,每次都需要更长的时间。
那么如何使用套接字更新号码?
function test() {
const [number, setNumber]= useState(0);
useEffect(() => {
socket.on('numChange', function(data) {
let newNum = number + data;
setNumber(newNum)
console.log(number)
});
}, [socket])
return (
<main>
{number}
</main>
)}
这是我的实际问题的简化片段。套接字是在全局上下文中创建的。我开始使用的一个解决方案是将数字值存储在本地存储中并在 socket.on 函数中检索它,但这并不是一个适用于我所有用例的解决方案
您是否尝试过从依赖项数组中删除 socket
?理想情况下,您应该设置一个套接字处理程序,也仅在挂载时设置。
useEffect(() => {
socket.on('numChange', function(data) {
let newNum = number + data;
setNumber(newNum)
console.log(number)
});
}, [])
我无法解释它为什么有效,但我想我已经找到了我一直在寻找的解决方案
useEffect(() => {
socket.on('numChange', function(data) {
setNumber(number => number + data);
});
}, [socket]);
通过在 Chat.js
中交叉引用 this repo 找到解决方案
我有一个从发送 +1 或 -1 的服务器发出的套接字。 socket.on 必须在 useEffect 中,否则套接字会被调用两次。我不能只将数字 const 放在依赖项数组中,因为每次调用套接字时它都会链接以前的每个调用,每次都需要更长的时间。 那么如何使用套接字更新号码?
function test() {
const [number, setNumber]= useState(0);
useEffect(() => {
socket.on('numChange', function(data) {
let newNum = number + data;
setNumber(newNum)
console.log(number)
});
}, [socket])
return (
<main>
{number}
</main>
)}
这是我的实际问题的简化片段。套接字是在全局上下文中创建的。我开始使用的一个解决方案是将数字值存储在本地存储中并在 socket.on 函数中检索它,但这并不是一个适用于我所有用例的解决方案
您是否尝试过从依赖项数组中删除 socket
?理想情况下,您应该设置一个套接字处理程序,也仅在挂载时设置。
useEffect(() => {
socket.on('numChange', function(data) {
let newNum = number + data;
setNumber(newNum)
console.log(number)
});
}, [])
我无法解释它为什么有效,但我想我已经找到了我一直在寻找的解决方案
useEffect(() => {
socket.on('numChange', function(data) {
setNumber(number => number + data);
});
}, [socket]);
通过在 Chat.js
中交叉引用 this repo 找到解决方案