【发布时间】:2020-12-24 06:55:46
【问题描述】:
给定这个代码sn-p:
const [filled, setFilled] = useState(0);
//...
useEffect(() => {
console.log("start");
setFilled(() => {
setTimeout(() => {
console.log("old1");
setFilled(() => {
setTimeout(() => {
console.log("old2");
}, 1000);
return 20;
});
console.log("old3");
}, 1000);
return 10;
});
}, []);
谁能解释为什么 old2 被打印两次? 我知道代码很奇怪,但我仍然没有想法。它必须与功能状态集功能的内部 React 处理有关,但我无法在文档中找到任何解释。
谢谢。
【问题讨论】:
-
“我有奇怪的代码,我不知道它做了什么,但它做了一些奇怪的事情” - 听起来像 X/Y 问题
-
这只是递归 setTimeout 的简化版本,所以并不奇怪。
-
你想在这里达到什么目的?
-
@ksav,我正在尝试执行某些操作 - 在这种情况下,console.log 每秒一次。这段代码唯一缺少的是递归 setTimeout,它在每次迭代中将操作加倍 - 这意味着它将打印 old2 4、8、16 次等等。
-
所以你每秒钟都在尝试设置状态?请参阅meta.stackexchange.com/questions/66377/what-is-the-xy-problem 并考虑编辑您的问题。
标签: javascript reactjs