reactjs - 使用 React Hooks 每秒改变颜色

标签 reactjs react-hooks

我正在尝试使用 React Hooks 将 SVG 结构的颜色从红色更改为白色,然后将白色更改为红色。问题是几秒钟后颜色开始快速变化,而不是每秒变化一次。我不明白代码哪里出了问题。

这里是useState。

const[rectColor, rectColorSet] = useState('red')

以及用于更改颜色的 useEffect。

useEffect(() => {
    if(rectColor === 'red'){
        let timer = setInterval(() => {
            rectColorSet('white')
        }, 1000)
    }
    // console.log('timer',timer)
    else if(rectColor ==='white'){
        let timer = setInterval(() => {
            rectColorSet('red')
        }, 1000)
    }
})

这是我使用包含颜色的状态的地方。

 d={`
     M-0.20 0 L-0.20 0.30 L0.20 0.30 L0.20 0 L-0.20 0
  Z`}
            
     fill={props.value ? "green" : rectColor}
        />
   }

最佳答案

每个渲染设置一个新的间隔。使用 setTimeout 而不是 setInterval,并且不要忘记清理效果:

useEffect(() => {
    if (rectColor === 'red' || rectColor === 'white') {
        const timeoutID = setTimeout(() => {
            rectColorSet(rectColor === 'red' ? 'white' : 'red');
        }, 1000);
        return () => clearTimeout(timeoutID);
    }
});

或者在 bool 值之间切换,而不是使用字符串表示状态。如果您添加其他可能更改的状态,则在组件安装时使用单个时间间隔可能更易于管理:

const [red, setRed] = useState(true);
useEffect(() => {
  const intervalID = setInterval(() => {
    setRed(red => !red);
  }, 1000);
  return () => clearInterval(intervalID);
}, []);

关于reactjs - 使用 React Hooks 每秒改变颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64619025/

相关文章:

javascript - React js 和 MUI 中的三 Angular 形 slider

ReactJS 模板组件

javascript - useState 和 props 的变化

reactjs - 测试依赖于其他副作用(或其他测试)的 React Hooks 副作用

javascript - 当用户未登录到应用程序时,使用 React 路由重定向的正确方法是什么?

android - 使用 react-native-video (Android) 在加载和视频播放之间 react 原生黑屏一秒钟

arrays - TypeScript:输入带有值或空的数组/元组

javascript - 为什么调用 useState 钩子(Hook)的 set 函数会立即应用于异步函数?

javascript - useRef() 无效 Hook 调用 [NextJs]

javascript - React-datepicker 打开延迟 onClick