是否可以更改 React 中 useEffect 的钩子和依赖项 boolean ?
我正在 React 上研究 CSS Transition,它会在 2 秒后自动卸载。我正在考虑使用 useEffect 和 useState 来解决这个问题。
我知道改变 useEffect 内部的依赖关系会导致无限循环。
例如,下面的代码将导致无限循环。
const [count, setCount] = useState(0);
useEffect(() => {
setCount(prev => prev + 1);
},[count]);
但我认为如果我将依赖项设置为布尔值并在 useEffect 中设置 if 语句,就像下面的代码一样,就不会发生无限循环。
const [showStatus, setshowStatus] = useState(false);
useEffect(() => {
const timeId = setTimeout(() => {
if (showStatus === true){
setshowStatus(false)
}
}, 2000)
return (() => {clearTimeout(timeId)})
}, [showStatus]);
我对 React 比较陌生,所以我担心这段代码。我使用这段代码有什么问题吗?
I am working on CSS Transition on React that it automatically unmount after 2 seconds. I am thinking about using useEffect and useState to solve this problem.
I know that changing dependencies inside useEffect causes infinite loop.
For example, the code below will cause infinite loop.
const [count, setCount] = useState(0);
useEffect(() => {
setCount(prev => prev + 1);
},[count]);
But I think infinite loop won't happen if I set dependency to boolean and set if statement inside useEffect just like the code below.
const [showStatus, setshowStatus] = useState(false);
useEffect(() => {
const timeId = setTimeout(() => {
if (showStatus === true){
setshowStatus(false)
}
}, 2000)
return (() => {clearTimeout(timeId)})
}, [showStatus]);
I am relatively new to React so I am worried about this code. Do I have any problems using this code?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为这里的答案更好
React hooks - 清除超时的正确方法和间隔
I think it's answered here better
React hooks - right way to clear timeouts and intervals