跳到内容
+

从 @material-ui/pickers 迁移

@material-ui/pickers 已移动到 @mui/lab

本指南概述了从 pickers v3.2.10 更改的核心概念。

安装

如果尚未安装,您需要安装 @mui/lab 包。⚠️ 确保您已安装 v5.0.0-alpha.30v5.0.0-alpha.89(包括两者)之间的版本。

导入

不再发布选择器的 keyboard 版本。移动和桌面选择器的所有版本都实现了键盘输入以提高可访问性。

-import { KeyboardDatePicker } from '@material-ui/pickers';
+import DatePicker from '@mui/lab/DatePicker';

-<KeyboardDatePicker />
+<DatePicker />

此外,这些被移动到不同的导入中,而不是提供 variant 属性,这意味着如果您仅使用桌面选择器,则捆绑包将不包含 Dialog

  • <DesktopDatePicker /> – 仅桌面视图。
  • <MobileDatePicker /> – 仅移动视图。
  • <DatePicker /> – 根据用户指针偏好设置的移动或桌面视图。
  • <StaticDatePicker /> – 选择器视图本身,没有输入或任何其他包装器。
-import { DatePicker } from '@material-ui/pickers';
+import DesktopDatePicker from '@mui/lab/DesktopDatePicker';

-<DatePicker variant="inline" />
+<DesktopDatePicker />

相同的约定适用于 TimePicker<DesktopTimePicker><MobileTimePicker />

MuiPickersUtilsProvider

MuiPickersUtilsProvider 已删除,取而代之的是 LocalizationProvider。此外,选择器不再需要您手动安装 date-io 适配器。所有内容都包含在 lab 中。

❌ 之前

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

✅ 之后

import AdapterDateFns from '@mui/lab/AdapterDateFns';
import LocalizationProvider from '@mui/lab/LocalizationProvider';


function App() {
  return (
    <LocalizationProvider dateAdapter={AdapterDateFns}>
      ...
    </LocalizationProvider>
  )
);

渲染输入

我们引入了一个新的必需的 renderInput 属性。这简化了使用非 Material UI 文本字段输入组件。

<DatePicker renderInput={(props) => <TextField {...props} />} />
<TimePicker renderInput={(props) => <TextField {...props} />} />

以前,属性分布在 <TextField /> 组件上。从现在开始,您将需要使用新的 renderInput 属性来提供这些属性

 <DatePicker
-  label="Date"
-  helperText="Something"
+  renderInput={props => <TextField label="Date" helperText="Something" /> }
 />

状态管理

选择器的状态/值管理逻辑已从头开始重写。现在,当日期选择器的每个视图结束时,选择器将调用 onChange 属性。onError 处理程序也完全不同。仔细检查您与表单集成的选择器,因为表单集成问题可能很微妙。

无需必需的掩码

不再需要掩码。此外,如果您提供的掩码无效,选择器将忽略该掩码,并允许任意输入。

<DatePicker
  mask="mm"
  value={new Date()}
  onChange={console.log}
  renderInput={(props) => (
    <TextField {...props} helperText="invalid mask" />
  )}
/>

<DatePicker
  value={new Date()}
  onChange={console.log}
  renderInput={(props) => (
    <TextField {...props} helperText="valid mask" />
  )}
/>

以及更多

 <DatePicker
-  format="DD-MM-YYYY"
+  inputFormat="DD-MM-YYYY"

有很多更改,请务必小心,确保您的测试和构建通过。如果您对日期选择器有高级用法,则重写它可能会更简单。

如果您发现改进指南的机会,请打开一个拉取请求。