gpt4 book ai didi

javascript - ReactJS:为什么一种状态的值不同?

转载 作者:行者123 更新时间:2023-12-03 13:37:29 25 4
gpt4 key购买 nike

所以我正在使用非常基本的组件来学习 Reactjs。我从不同的函数中注销相同的状态,但我看到的是不同的值。

import React, { useState, useEffect, useRef } from "react";

const Test = props => {
const [count, setCount] = useState(0);

useEffect(()=>{
setInterval(() => {
console.log("count in interval is:", count);
}, 1000);
},[props]);

function btnClick() {
const newCount = count + 1;
setCount(newCount);
console.log("count changed to: ", newCount);
}
return (
<div>
count is {count}
<br></br>
<button onClick={btnClick}>+</button>
</div>
);
};

export default Test;

点击几次后输出并等待,日志为:

Test.js:8 count in interval is: 0
Test.js:15 count changed to: 1
Test.js:15 count changed to: 2
Test.js:15 count changed to: 3
Test.js:15 count changed to: 4
(8 rows) Test.js:8 count in interval is: 0

我希望两个函数中的“计数”相同。谁能解释一下这一点吗?

非常感谢。

最佳答案

Test 只有一个 setInterval 函数,其中 count 始终为 0。因为它仅在初始渲染期间创建。

从未创建了另一个setInterval,因为效果从未被触发[props]作为依赖项.

要在每次重新渲染时更改 setInterval 的计数:

  • 删除依赖项
  • 返回效果内的清理函数
useEffect(
() => {
const t = setInterval(() => {
console.log("count in interval is:", count);
}, 1000);

return () => clearInterval(t); // cleanup on every re-render
}
// no dependency: effect runs on every re-render
);

但是上面的代码会有警告:

"missing count dependency"

因此,只需添加 count 作为依赖项,仅在 count 更改时运行效果

useEffect(
() => {
const t = setInterval(() => {
console.log("count in interval is:", count);
}, 1000);

return () => clearInterval(t); // cleanup "old" setInterval
}
, [count] // ony run effect every time count changes
);

关于javascript - ReactJS:为什么一种状态的值不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58656394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com