【发布时间】:2020-08-15 23:41:00
【问题描述】:
我有这个简单的代码:
const [state, setState] = useState([]);
useEffect(() => {
socket.on('something', data => {
console.log('ONE');
setState(old => {
console.log('TWO');
const newArr = [...old];
// do something to newArr
return newArr;
});
});
return () => {
socket.off('something');
};
}, []);
一切都按预期工作,但由于某种原因,something 回调触发一次(ONE 打印一次),但在我设置状态时,setState 回调被调用两次(它打印TWO两次)。这是为什么呢?
【问题讨论】:
-
这是在 on purpose 在开发模式下完成的。
-
@PatrickRoberts,哦,我明白了,所以...我该如何避免呢?
-
你没有。在生产模式下它不会这样做,而在开发模式下,如果您执行突变或在外部存储状态以响应钩子,它会快速揭示问题。简而言之,没有什么问题,也没有什么需要修复的。
标签: javascript reactjs socket.io callback react-hooks