You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中Datepicker日期选择后无法获取当前值的问题解决

问题出在哪

React里useState的更新是异步的,而且组件函数内的state变量是当前渲染周期的闭包快照。你在onChangePicker里调用setInfo(date_new)后,当前函数作用域里的Info依然是调用函数时的旧值——哪怕用sleep等待5秒也没用,因为这个Info不会在当前函数里跟着state更新同步变化。

怎么解决

有两种靠谱的处理方式:

方法一:直接使用传入的date_new

既然date_new就是用户刚选择的最新日期,直接用它就行,没必要等state更新:

async function onChangePicker(date_new) {
  setInfo(date_new);
  // 直接用date_new代替Info
  console.log(date_new);
  await sleep(5000);
  console.log(date_new);
}

方法二:用useEffect监听state变化

如果后续逻辑必须依赖更新后的Info状态,可以通过useEffect监听Info的变化,等状态更新完成后再执行操作:

import { useState, useEffect } from 'react';

const Datagrid = () => {
  const [Info, setInfo] = useState(new Date());

  function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
  }

  async function onChangePicker(date_new) {
    setInfo(date_new);
  }

  // 监听Info变化,状态更新后执行后续逻辑
  useEffect(() => {
    async function handleUpdate() {
      await sleep(5000);
      console.log(Info); // 这里拿到的是更新后的最新值
    }
    handleUpdate();
  }, [Info]); // 依赖项设为Info,只有当Info变化时才触发

  return (
    <div className="App">
      <DatePicker 
        dateFormat="yyyy-MM-dd" 
        selected={Info} 
        onChange={(date_new) => onChangePicker(date_new)} 
      />
    </div>
  );
}

内容的提问来源于stack exchange,提问作者ar rr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 01:28:22