React native 带挂钩的动态倒计时计时器(React Native)

React native 带挂钩的动态倒计时计时器(React Native),react-native,react-redux,react-hooks,React Native,React Redux,React Hooks,我有一组数字保存到redux中,用于一组练习。当您进入每个练习页面并按“完成”时,计时器将倒计时到零,然后重置为原始数字 因此,我将使用useState设置原始值 const[count,setCount]=useState({ReduxValue}) 但是我会使用useffect进行倒计时,并将数字重置为原始值,对吗?但是,useffect会调用什么?初始状态值(setInitialTime)? 我会使用相同的useffect重置该值吗 编辑: 这就是我目前所拥有的。一旦数字变为零,它就会崩溃

我有一组数字保存到redux中,用于一组练习。当您进入每个练习页面并按“完成”时,计时器将倒计时到零,然后重置为原始数字

因此,我将使用
useState
设置原始值

const[count,setCount]=useState({ReduxValue})

但是我会使用
useffect
进行倒计时,并将数字重置为原始值,对吗?但是,
useffect
会调用什么?初始状态值(
setInitialTime
)? 我会使用相同的
useffect
重置该值吗

编辑: 这就是我目前所拥有的。一旦数字变为零,它就会崩溃,下一次倒计时时,它看起来像是在跳过或跳过数字

   function Counter() {
      const [count, setCount] = useState({ReduxValue});
      const [isActive, setIsActive] = useState(false);
    
      function startTimer() {
        setCount({ReduxValue});
        setIsActive(true);
      }
    
      useEffect(() => {
        let interval = null;
        if (isActive) {
          interval = setInterval(() => {
            count - 1 < 0 ? setCount(5) : setCount(count - 1);
          }, 1000);
        } else if (!isActive && count != 0) {
          clearInterval(setInterval);
        }
      });
函数计数器(){
const[count,setCount]=useState({ReduxValue});
常量[isActive,setIsActive]=useState(false);
函数startTimer(){
setCount({ReduxValue});
setIsActive(真);
}
useffect(()=>{
设区间=null;
如果(isActive){
间隔=设置间隔(()=>{
计数-1<0?设置计数(5):设置计数(计数-1);
}, 1000);
}如果(!isActive&&count!=0),则为else{
清除间隔(设置间隔);
}
});
  • 使用布尔值触发倒计时
  • 倒计时结束后,您可以更新redux状态
  • 函数应用程序(){
    const[counter,setCounter]=React.useState(10);
    常量[startCountdown,setStartCountdown]=React.useState(false);
    React.useffect(()=>{
    如果(开始计数){
    常量计时器=计数器>0&&setInterval(()=>setCounter(计数器-1),100);
    如果(计数器==0){
    //倒计时结束了
    设置开始倒计时(假);
    //在此处更新您的redux状态
    //updateReduxCounter(0);
    }
    返回()=>clearInterval(计时器);
    }
    },[计数器,开始计数];
    返回(
    倒计时:{counter}
    设置开始倒计时(true)}>开始倒计时
    );
    }
    
  • 使用布尔值触发倒计时
  • 倒计时结束后,您可以更新redux状态
  • 函数应用程序(){
    const[counter,setCounter]=React.useState(10);
    常量[startCountdown,setStartCountdown]=React.useState(false);
    React.useffect(()=>{
    如果(开始计数){
    常量计时器=计数器>0&&setInterval(()=>setCounter(计数器-1),100);
    如果(计数器==0){
    //倒计时结束了
    设置开始倒计时(假);
    //在此处更新您的redux状态
    //updateReduxCounter(0);
    }
    返回()=>clearInterval(计时器);
    }
    },[计数器,开始计数];
    返回(
    倒计时:{counter}
    设置开始倒计时(true)}>开始倒计时
    );
    }
    
    最好提供一个代码示例?我添加了一个代码示例,但我正在考虑如何将其重置为原始redux值,以及如何仅在按下按钮时启动倒计时。如何调用函数来运行useEffect?最好提供一个代码示例?我添加了一个代码示例,但我试图考虑如何将其重置为原始redux值,以及如何仅在按下按钮时启动倒计时。如何调用函数来运行useEffect?
    function App() {
      const [counter, setCounter] = React.useState(10);
      const [startCountdown, setStartCountdown] = React.useState(false);
    
    
      React.useEffect(() => {
        if (startCountdown) {
          const timer = counter > 0 && setInterval(() => setCounter(counter - 1), 100);
    
          if (counter === 0) {
            // countdown is finished
            setStartCountdown(false);
            // update your redux state here
            // updateReduxCounter(0);
          }
          
          return () => clearInterval(timer);
        }
      }, [counter, startCountdown]);
    
      return (
        <div>
          <div>Countdown: {counter}</div>
          <button onClick={() => setStartCountdown(true)}>Start Countdown</button>
        </div>
      );
    }