2 回答
TA贡献1802条经验 获得超10个赞
setColor
是一个改变color
状态的函数。它不会直接更改color
变量。
每次状态改变时App
函数都会重新运行。
因此,当它第一次运行时useState("red")
,它调用 ,发现不存在现有状态,将状态设置为"red"
然后将状态 ( "red"
) 分配给color
。DOM 将根据结果进行更新。
setColor("blue");
"blue"
更改导致App
再次运行的状态。已经存在一个状态,因此color
设置为"blue"
。它不是用 初始化的"red"
。DOM 将根据结果进行更新。
一秒钟后,超时解决并将setColor("purple");
颜色设置为"purple"
导致再次App
运行的状态。已经存在一个状态,因此设置为。color
"purple"
每次更新 DOM 时,它都会revealColor
传递一个新函数,onClick
该函数已关闭color
最近调用的变量App
。
同时,您传递给的函数useEffect
仅运行一次(因为您[]
作为第二个参数传递),因此color
它关闭的变量是原始变量,您将"red"
在那里记录。
TA贡献1831条经验 获得超10个赞
这是因为你没有包含color在 的依赖数组中useEffect。因此,useEffect不知道已经color改变。如果将其包含在依赖项数组中,则每当更改useEffect时都会触发。color因此,您blue登录时就可以看到。
useEffect(() => {
setColor("blue");
setTimeout(() => {
console.log(color);
setColor("purple");
}, 1000);
}, [color]); // <- dependency array
添加回答
举报