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

Antd <DatePicker/>设置value后点击出现无限循环问题求助

Antd DatePicker 设置默认值后日历无限跳转到未来的问题

我想给Antd的<DatePicker/>组件设置value或defaultValue属性,但设置后点击日期选择器,日历会无限跳转到未来。移除这两个属性后日历恢复正常,但无法初始设置日期。

相关代码如下:

import React from "react";
import "./index.css";
import type { DatePickerProps } from "antd";
import { DatePicker, Space } from "antd";
import moment from "moment";

const onChange: DatePickerProps["onChange"] = (date, dateString) => {
  console.log(date, dateString);
};
const day = moment();
const format = "DD.MM.YYYY";

const App: React.FC = () => (
  <Space direction="vertical">
    <DatePicker
      onChange={onChange}
      format={format}
      defaultValue={moment(day)}
    />
  </Space>
);

export default App;

问题原因及修复方案

问题出在你重复调用moment(day)——day本身已经是一个moment实例,再用moment包裹会导致内部时间持续刷新,触发日历无限跳转。

修复方法很简单:直接使用已有的moment实例作为defaultValue,不需要再次用moment包裹:

<DatePicker
  onChange={onChange}
  format={format}
  defaultValue={day}
/>

如果使用受控模式(通过value属性绑定日期),要确保传递的是稳定的moment实例,避免在组件渲染时重复创建导致无限重渲染,推荐用useState保存状态:

import React, { useState } from "react";
import "./index.css";
import type { DatePickerProps } from "antd";
import { DatePicker, Space } from "antd";
import moment from "moment";

const onChange: DatePickerProps["onChange"] = (date, dateString) => {
  console.log(date, dateString);
};
const format = "DD.MM.YYYY";

const App: React.FC = () => {
  const [selectedDate, setSelectedDate] = useState(moment());
  
  return (
    <Space direction="vertical">
      <DatePicker
        onChange={(date) => setSelectedDate(date)}
        format={format}
        value={selectedDate}
      />
    </Space>
  );
};

export default App;

内容的提问来源于stack exchange,提问作者Arya Dewangga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:25:46