MUI - 单击文本字段中的任意位置时打开日期选择器

Yan*_*teh 10 css web-frontend reactjs material-ui

我有一个日期选择器,当用户单击字段中的任意位置而不仅仅是日历图标时,我想显示该日期选择器。

这是选择器

在此输入图像描述

export function DatePickerField(props) {
  ......

  return (
      <Grid container>
          <MuiPickersUtilsProvider utils={DateFnsUtils}>
              <KeyboardDatePicker
                  {...field}
                  {...props}
                  disableToolbar
                  inputVariant="outlined"
                  value={selectedDate}
                  onChange={_onChange}
                  error={isError}
                  autoOk
                  invalidDateMessage={isError && error}
                  helperText={isError && error}
              />
          </MuiPickersUtilsProvider>
      </Grid>
  );
}
Run Code Online (Sandbox Code Playgroud)

我需要这样做,因为如果手动输入日期,它不会抛出任何错误,但我会获取invalid date表单数据。

单击字段时如何显示选择器?

Nea*_*arl 17

MUI v5DatePicker在包中添加了该组件@mui/lab。如果您希望在用户单击 内部后打开选择器TextField,请使用MobileDatePicker,但它没有日历图标,如果您想要一个,请参阅此答案。

<MobileDatePicker
  {...}
  renderInput={(params) => <TextField {...params} />}
/>
Run Code Online (Sandbox Code Playgroud)

但是DesktopDatePicker确实有日历图标,但您必须编写额外的代码来控制open状态并告诉选择器在TextField单击时打开:

<DatePicker
  open={open}
  onOpen={() => setOpen(true)}
  onClose={() => setOpen(false)}
  renderInput={(params) => {
    return (
      <TextField
        {...params}
        onClick={(e) => setOpen(true)}
      />
    );
  }}
/>
Run Code Online (Sandbox Code Playgroud)

Codesandbox 演示


原答案

您可以控制KeyboardDatePicker的open状态并将其设置为单击true时:TextField

<MobileDatePicker
  {...}
  renderInput={(params) => <TextField {...params} />}
/>
Run Code Online (Sandbox Code Playgroud)

现场演示

编辑67053310/material-ui-datepicker


sir*_*sam 9

对于使用 slotProps 的 MUI-X Datepicker v6,它看起来像这样:

const [open,setOpen] = useState(false);
<DatePicker     
   open={open}
   onClose={() => setOpen(false)}
   slotProps={{
     textField: {
      onClick: () => setOpen(true),             
     },
   }}
 />
Run Code Online (Sandbox Code Playgroud)