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

Material UI DateCalendar设置defaultValue致应用崩溃求助(TypeScript)

解决Material UI DateCalendar在TypeScript中使用moment/defaultValue崩溃的问题

问题根源

MUI X的日期组件默认基于原生Date对象工作,直接传入moment实例会因为缺少对应日期适配器导致组件无法识别日期格式,进而引发运行时崩溃。官方文档提到支持moment是需要额外配置适配器的,并非开箱即用。

具体修复步骤

1. 确认依赖安装

确保已安装必要的依赖包:

npm install @mui/x-date-pickers moment
# 或使用yarn
yarn add @mui/x-date-pickers moment

2. 配置日期适配器

用LocalizationProvider包裹DateCalendar组件,指定使用MomentAdapter,让组件能够识别moment实例:

import { DateCalendar, LocalizationProvider } from '@mui/x-date-pickers';
import { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment';
import moment from 'moment';
import { useState } from 'react';

const YourComponent = () => {
  const [currentDate, setCurrentDate] = useState<moment.Moment | null>(moment());
  const [selectedDate, setSelectedDate] = useState<moment.Moment | null>(moment());

  const handleDateChange = (newDate: moment.Moment | null) => {
    setSelectedDate(newDate);
  };

  return (
    <LocalizationProvider dateAdapter={AdapterMoment}>
      <DateCalendar
        disablePast={true}
        defaultValue={currentDate}
        onChange={handleDateChange}
      />
    </LocalizationProvider>
  );
};

export default YourComponent;

3. 修正类型与逻辑优化

  • 配置适配器后,onChange回调的参数直接是moment.Moment | null类型,无需手动用moment(newDate)转换,避免类型冗余与潜在错误。
  • 初始化currentDate时建议传入有效的moment实例(如moment())而非null,避免组件初始化时因空值引发异常。

4. 检查版本兼容性

确保@mui/x-date-pickers版本与moment版本兼容:

  • MUI X v6+ 要求moment v2.29.0及以上版本,若版本不匹配可能引发适配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:18:29