Реквизит MUI DatePicker shouldDisableDate, приводящий к ошибке

#javascript #reactjs #material-ui

Вопрос:

 <Controller
   name="toDate"
   control={control}
   defaultValue={null}
   render={({ field }) => (
    <DatePicker 
        format="DD/MM/yyyy"
        value={field.value}
        onChange={(e) => { setToDate(e); field.onChange(e); }}
        minDate={fromDate}
        shouldDisableDate={fromDate}
        />
    )}
    {...register("toDate",{ required: true })}
/>
 

Я использовал shouldDisableProp, чтобы отключить дату, которая выбирается внутри другого указателя даты, значение которого хранится в переменной состояния ‘FromDate’.
Но когда я нажимаю на указатель даты, это приводит к этой ошибке.

minDate работает отлично, используя переменную состояния FromDate.

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

1. Что fromDate такое структура s?

2. Реквизит shouldDisableDate ожидает функцию, и я предполагаю, что это ваша проблема. вы предоставляете не функцию, а значение.

3. @MajidM. Ср. 24 ноября 2021 г. 17:12:58 GMT 0530 (стандартное время Индии)

4. @ViniciusSilveiraAlves я пробовал эту функцию const returnFromDate = () => { return (fromDate) } , когда я использую эту функцию, ошибка не возникает, но все даты отключены. Я не знаю, правильно ли это, я только что вернул ту же переменную состояния «FromDate» в этой функции

5. @AlanShajanMattathil fromDate является строковым значением, но shouldDisableDate ожидает логическое значение

Ответ №1:

Метод shouldDisableDate получает параметр date и ожидает логическое значение.

 import * as React from "react";
import TextField from "@mui/material/TextField";
import AdapterDateFns from "@mui/lab/AdapterDateFns";
import LocalizationProvider from "@mui/lab/LocalizationProvider";
import DatePicker from "@mui/lab/DatePicker";

export default function BasicDatePicker() {
  const [value, setValue] = React.useState<Date | null>(null);
  const [fromDate, setFromDate] = React.useState<Date | null>(null);

  return (
    <>
      <LocalizationProvider dateAdapter={AdapterDateFns}>
        <DatePicker
          label="From Date"
          value={fromDate}
          onChange={(newValue) => {
            setFromDate(newValue);
          }}
          renderInput={(params) => <TextField {...params} />}
        />
      </LocalizationProvider>
      <br />
      <LocalizationProvider dateAdapter={AdapterDateFns}>
        <DatePicker
          label="To Date"
          value={value}
          onChange={(newValue) => {
            setValue(newValue);
          }}
          minDate={fromDate}
          shouldDisableDate={(dateParam) => {
            //your_condition here
            //return true to disabled and false to enable
            const fromFormatted = fromDate.toISOString().split("T")[0];
            const currentDate = dateParam.toISOString().split("T")[0];

            return fromFormatted === currentDate ? true : false;
          }}
          renderInput={(params) => <TextField {...params} />}
        />
      </LocalizationProvider>
    </>
  );
}


 

Обновленный код

Так что сделайте что-то подобное, и вы достигнете своей цели. В вашем случае сравните параметр dateParam с вашим параметром FromDate, чтобы вернуть true или false и отключить или нет дату.

Редактировать: Now адаптирован к вашему реальному случаю. Просто проверьте это.

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

1. У меня нет условий, отключенная дата всегда должна быть датой внутри состояния fromDate , как мне это сделать?

2. Итак, у вас есть условие. Всегда, когда параметр dateParam будет равен, ваш FromDate возвращает true для отключения.

3. Не могли бы вы отредактировать ответ и показать мне, как записать это в качестве условия? Я новичок в JavaScript. Я просто хочу отключить дату внутри fromDate

4. Я не знаю структуру вашего параметра FromDate, это дата? несмотря на то, что я отредактировал свой пост с одним условием для вас в качестве примера, проверьте его. Я думаю, теперь вы можете понять, как это работает. Также в codesanbox есть игровая площадка, которую вы можете использовать, чтобы помочь вам.

5. Wed Nov 24 2021 17:12:58 GMT 0530 (India Standard Time) это пример того, что хранится внутри fromDate