Reactjs useState on startDate使用setStartDate时不更新日期

Reactjs useState on startDate使用setStartDate时不更新日期,reactjs,use-state,tsx,Reactjs,Use State,Tsx,这是我的密码 import format from "date-fns/format"; import setHours from "date-fns/setHours"; import setMinutes from "date-fns/setMinutes"; const [startDate, setStartDate] = useState<Date>(new Date()); const startTime =

这是我的密码

import format from "date-fns/format";
import setHours from "date-fns/setHours";
import setMinutes from "date-fns/setMinutes";

const [startDate, setStartDate] = useState<Date>(new Date());

const startTime = setHours(setMinutes(date, 0), hour);
console.log(startTime); // showing correct date and time as I set

setStartDate(startTime);
console.log(startDate); // this is showing current date and time
我得到当前的日期和时间。然而,如果我这样做

console.log(startTime);
它显示了我想要的正确日期和时间


你能帮忙吗。我使用的是React的tsx格式。开发人员在接下来的几个小时内无法使用,我必须尽快将此信息发送给我的客户。

您在最后两行中出现了错误

setStartDate(startTime);
console.log(startDate); 

如果您将startDate设置为startTime,它将明确显示当前日期和时间。希望它能正常工作。

useState
是一个异步函数。当您尝试读取状态时,它正在执行,其值尚未更新。考虑下面的例子:

//定义状态
const[startDate,setStartDate]=useState(新日期());
const startTime=设置小时(设置分钟(日期,0),小时)//计算新状态
console.log(开始时间);//由于synchronouse行为,工作正常
设置开始日期(开始时间)//异步,如果任何其他状态更新正在进行中,则将等待。如果没有,它将尝试异步更新
console.log(开始日期);//当您到达这里时,它仍在更新并指向旧值。

如果您想读取新的值,可以考虑使用<代码>使用效果(FN,[])< /代码>。在您的情况下,您可以按如下方式读取新状态:

const[startDate,setStartDate]=useState(new Date());
useffect(()=>{
console.log(startDate);//在startDate更改时激发
},[起始日期])

您可以访问此处进行工作演示。此外,您还可以阅读有关
useffect
和[Detailed]

的更多信息
setHours
是调度功能吗?若否,原因为何?分派函数不返回anything@CertainPerformance对于
setMinutes
,同样的问题,tooI正在使用date fns,比如从“date fns/setHours”导入setHours;从“日期fns/setMinutes”导入setMinutes;谢谢你的帮助,你是救命恩人:)
setStartDate(startTime);
console.log(startDate);