#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