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

React Material-UI DatePicker报错:Cannot read property 'date' of undefined

解决Material-UI DatePicker在Storybook中抛出的TypeError问题

我看了你遇到的这个问题——在Storybook里使用Material-UI的DatePicker时出现TypeError: Cannot read property 'date' of undefined,这个错误其实很常见,核心原因是Material-UI Pickers组件依赖第三方日期处理适配器,但你没有配置它。

先拆解下问题:你直接导入并使用了DatePicker,但这个组件本身并不自带日期解析、格式化等核心逻辑,它需要借助MuiPickersUtilsProvider和对应的日期库适配器才能正常工作。当组件内部尝试调用日期处理方法时,找不到对应的适配器实例,就会抛出这个“无法读取undefined的'date'属性”的错误。

解决步骤:

1. 安装日期适配器依赖

首先你需要安装一个日期库和对应的适配器包,比如常用的date-fns组合:

npm install @date-io/date-fns@1.x date-fns
# 或者用yarn
yarn add @date-io/date-fns@1.x date-fns

注意:如果你用的是Material-UI Pickers v3版本,要安装@date-io/date-fns的1.x版本;如果是v4+,则对应2.x版本。

2. 修改组件代码,添加适配器包裹

你需要导入MuiPickersUtilsProvider和适配器,然后用它包裹你的DatePicker组件,同时别忘了补上缺失的handleDateChange方法:

import React, { PureComponent } from 'react';
import { DatePicker, MuiPickersUtilsProvider } from 'material-ui-pickers';
import DateFnsUtils from '@date-io/date-fns'; // 导入date-fns适配器

class DatePickers extends PureComponent {
  state = {
    selectedDate: new Date(),
  }

  // 补上日期变更的处理方法
  handleDateChange = (date) => {
    this.setState({ selectedDate: date });
  };

  render() {
    console.log(this.state);
    const { selectedDate } = this.state;
    return (
      // 用适配器提供者包裹DatePicker
      <MuiPickersUtilsProvider utils={DateFnsUtils}>
        <div>
          <DatePicker
            label="Basic example"
            value={selectedDate}
            onChange={this.handleDateChange}
            animateYearScrolling={false}
          />
        </div>
      </MuiPickersUtilsProvider>
    )
  }
}

export default DatePickers;

3. (可选)在Storybook全局配置适配器

如果你的Storybook里有很多使用DatePicker的组件,不想每个组件都重复写MuiPickersUtilsProvider,可以在Storybook的预览文件(.storybook/preview.js)里全局配置:

import { MuiPickersUtilsProvider } from 'material-ui-pickers';
import DateFnsUtils from '@date-io/date-fns';

export const decorators = [
  (Story) => (
    <MuiPickersUtilsProvider utils={DateFnsUtils}>
      <Story />
    </MuiPickersUtilsProvider>
  ),
];

这样修改后,你的DatePicker就能在Storybook里正常渲染和工作了,那个类型错误也会消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:29:12