Javascript 反应挂钩不更新

Javascript 反应挂钩不更新,javascript,reactjs,Javascript,Reactjs,我是个学生,很抱歉代码太乱了。问题在于startTimehook。我将其初始化为0,然后在startTimer函数中将其设置为Date.now()。然而,直到我第二次按下它,它才得到更新。为什么会这样 我评论了问题所在。 如果出了问题,也很抱歉,这是我的第一篇帖子 import React,{useState}来自“React”; //从'@testing library/react'导入{render}; 功能秒表(){ 常量[毫秒震动,设置毫秒震动]=使用状态(0); const[secon

我是个学生,很抱歉代码太乱了。问题在于
startTime
hook。我将其初始化为0,然后在
startTimer
函数中将其设置为
Date.now()。然而,直到我第二次按下它,它才得到更新。为什么会这样

我评论了问题所在。 如果出了问题,也很抱歉,这是我的第一篇帖子

import React,{useState}来自“React”;
//从'@testing library/react'导入{render};
功能秒表(){
常量[毫秒震动,设置毫秒震动]=使用状态(0);
const[secondshake,setSecondsHook]=useState(0);
const[minutesHook,setMinutesHook]=useState(0);
const[hoursHook,setHoursHook]=useState(0);
const[running,setRunning]=useState(2);
const[id,setId]=useState(0);
const[split,setSplit]=useState(0);
常量[startTime,setStartTime]=useState(0);
函数toggleRunning(){
运行?设置运行(0):设置运行(1);
如果(运行==1){
setRunning(0);
}else if(正在运行==0){
设置运行(1);
}否则{
设置运行(1);
}
}
函数pauseTimer(id){
startTimer();
}
常量毫秒=(差异)=>diff%1000/10//毫秒
常数秒=(差异)=>(差异/1000)%60;//秒
常量分钟=(diff)=>(diff/1000/60)%60;//分钟
常数小时=(差异)=>diff/1000/60/60;//小时
功能计时器(开始时间){
var intervalId=setInterval(函数(){
让currentTime=Date.now();
设diff=当前时间-开始时间;
setmillisondshake(数学trunc(毫秒差));
setSecondHook(数学trunc(秒(差));
setMinutesHook(Math.trunc(minutes(diff));
setHoursHook(Math.trunc(hours(diff));
}, 50);
返回有效期;
}
函数startTimer(){
console.log(正在运行);
如果(运行==2){
setStartTime(Date.now());//这就是问题所在,它不会更新渲染。
}
切换运行();
如果(运行==0 | |运行==2){
清除间隔(id);
setId(计时器(开始时间));
}else if(运行==1){
清除间隔(id);
}
}
函数splitTime(){
//复制挂钩
}
如果(正在运行==0){
返回(
{millisondshake}:{secondshake}:{minutesHook}:{hoursHook}
)
}
如果(运行==2){
返回(
{millisondshake}:{secondshake}:{minutesHook}:{hoursHook}
)
}
else if(运行==1){
返回(
{millisondshake}:{secondshake}:{minutesHook}:{hoursHook}
)
}否则{
返回(
{millisondshake}:{secondshake}:{minutesHook}:{hoursHook}错误
)
}
}
导出默认秒表;

运行的目的是什么?为什么所有if语句都返回不同的视图?当调用
setRunning(..)
时,
running
的值不会立即更改(因为设置状态是异步的)。因此,您的
toggleRunning
函数不会像您期望的那样工作。如果所有这些视图都是关于拆分时间的,那么无论如何,您都需要完全改变您的方法。您发布的代码似乎正在运行: