React native 带挂钩的动态倒计时计时器(React Native)
我有一组数字保存到redux中,用于一组练习。当您进入每个练习页面并按“完成”时,计时器将倒计时到零,然后重置为原始数字 因此,我将使用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重置该值吗 编辑: 这就是我目前所拥有的。一旦数字变为零,它就会崩溃
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>
);
}