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
添加回答
举报
