Только для чтения MobileDatePicker не работает в MUI v5

#reactjs #material-ui #react-material #material-ui-x

Вопрос:

readOnly Флаг для MUI MobileDatePicker не работает. API не влияет на onClick функциональность. Единственным обходным путем является использование флага отключено. Однако мы используем обе readOnly функции и отключенные функции для разных случаев использования. Любая помощь будет признательна.

 <MobileDatePicker
  label="Date mobile"
  disableOpenPicker
  inputFormat="MM/dd/yyyy"
  value={value}
  readOnly
  onChange={handleChange}
  renderInput={(params) => (
    <TextField {...params} InputProps={{ readOnly: true }} />
  )}
/>
 

Ответ №1:

Похоже TextField , что внутренняя часть доступна только для чтения, но средство выбора-нет, и вы можете открыть средство выбора, нажав кнопку TextField . Простой обходной путь-всегда устанавливать open состояние false , чтобы предотвратить открытие средства выбора:

 <MobileDatePicker readOnly open={false}
 

Если вам нужно readonly динамически изменять значение:

 function EnhancedMobileDatePicker(props) {
  const [open, setOpen] = React.useState(false);
  const { readOnly } = props;

  React.useEffect(() => {
    // do not auto open picker after setting readOnly to false
    if (!readOnly) setOpen(false);
  }, [readOnly]);

  return (
    <MobileDatePicker
      {...props}
      readOnly={readOnly}
      open={readOnly ? false : open}
      onOpen={() => setOpen(true)}
      onClose={() => setOpen(false)}
    />
  );
}
 

Демо-версия Codesandbox

Комментарии:

1. Приведенное выше решение работает в случае, когда средство выбора всегда отключено. Я передаю опору, чтобы определить, отключен ли сборщик. Приведенное выше решение не работает, когда значение передается как true, т. е. всплывающее окно выбора даты всегда открыто и не закрывается.

2. @Yash так ты хочешь динамики readonly для своего DatePicker ?

3. @Yash смотрите мой обновленный ответ.

4. Да, именно так. Есть ли обходной путь? Для целей тестирования мы используем что-то вроде приведенного ниже. Но просто хочу знать, есть ли реальное решение.

5. {props.isEditable ? <MobileDatePicker label='Date Selector' .... /> : <MobileDatePicker label='Date Selector' readOnly open={false} .... /> }