gpt4 book ai didi

javascript - 无法使用 react Hook 之外的变量清除间隔

转载 作者:行者123 更新时间:2023-12-04 01:33:09 26 4
gpt4 key购买 nike

我正在尝试在 clearTimer 方法中访问 clearTimerInterval 但变得未定义,从 React Hook 内部获取警告 变量将在每次渲染后丢失。在下面的代码中,useEffect 钩子(Hook)被调用一次,那么变量 clearTimerInterval 是如何未定义的?

function Child(props) {
let [timerCount, setTimer] = useState(0);
var clearTimerInterval;
useEffect(() => {
clearTimerInterval = setInterval(() => {
setTimer(timerCount => {
return timerCount + 1;

});
}, 1000);
return () => {
clearInterval(clearTimerInterval);
};
}, []);

function clearTimer() {
clearInterval(clearTimerInterval);
}
return (
<div>
<div>Timer {timer}</div>
<button onClick={clearTimer}>ClearTimer</button>
</div>
);
}

export default React.memo(Child);

最佳答案

如果您需要在重新渲染时保存变量,请使用 useRef在这种情况下,它就像一个类实例字段,还请注意,对 refs 的更改不会触发重新渲染。

这将使您能够从 useEffect

外部清除间隔
function Child(props) {
let [timerCount, setTimer] = useState(0)
const intervalRef = useRef(null)

useEffect(() => {
intervalRef.current = setInterval(() => {
setTimer(prevState => prevState + 1)
}, 1000)

return () => clearInterval(intervalRef.current)
}, [])

function clearTimer() {
clearInterval(intervalRef.current)
intervalRef.current = null
}

return (
<div>
<div>Timer {timerCount}</div>
<button onClick={clearTimer}>ClearTimer</button>
</div>
)
}

关于javascript - 无法使用 react Hook 之外的变量清除间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60472035/

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