[英]How to disable certain days and dates in MUI react datepicker based on a json array?
我有 Laravel 应用程序,它返回一个 json 响应日期和星期几,应该在日期选择器中禁用
例如,当我使用console.log()
时,这是我的 datesOff 常量['2022-05-08', '2022-05-11', '2022-05-19']
当我console.log()
它时,这是 daysOff 常量[3, 6]
那么如何禁用返回的日期和日期(在这种情况下为星期三和星期日)
useEffect(() => {
axios.get(bookingUrl).then((response) => {
setDaysOff(response.data.daysOff);
setDatesOff(response.data.datesOff);
setBooked(response.data.booked);
})
}, []);
<LocalizationProvider locale={hr} dateAdapter={AdapterDateFns}>
<DatePicker
label="Date"
disablePast={true}
minDate={minDate}
maxDate={maxDate}
value={date}
shouldDisableDate={//What do i to here
}
onChange={(newDate) => {
setDate(newDate);
}}
renderInput={(params) => <TextField {...params} />}
DatePicker
具有renderDay 属性,我们可以使用它来自定义日历的日期单元格。 它需要 3 个 arguments,第一个是日期 object,我们可以使用它与应该禁用的日期数组进行比较:
const dates = ["2022-05-08", "2022-05-11", "2022-05-19"];
const customDayRenderer = (
date: Date,
selectedDates: Array<Date | null>,
pickersDayProps: PickersDayProps<Date>
) => {
const stringifiedDate = date.toISOString().slice(0, 10);
if (dates.includes(stringifiedDate)) {
return <PickersDay {...pickersDayProps} disabled />;
}
return <PickersDay {...pickersDayProps} />;
};
return (
<LocalizationProvider dateAdapter={AdapterDateFns}>
<DatePicker
label="Basic example"
value={value}
onChange={(newValue) => {
setValue(newValue);
}}
renderInput={(params) => <TextField {...params} />}
renderDay={customDayRenderer}
/>
</LocalizationProvider>
);
我的回答是基于 Dmitriif 的回答,但它已被更改,因为它在选择日期的过程中导致了许多渲染。
const customDayRenderer = (
date: Date,
selectedDates: Array<Date | null>,
pickersDayProps: PickersDayProps<Date>
) => {
amountOfExercises.forEach(day => {
selectedDates.push(new Date(day.exerciseDate))
});
return <PickersDay {...pickersDayProps} sx={{
[`&&.${pickersDayClasses.selected}`]: {
backgroundColor: "#EBEBE4",
cursor: 'not-allowed'
}
}} />;
};
<DatePicker
disablePast={true}
label="Exercise Date"
**renderDay={customDayRenderer}**
value={dateValue}
onChange={(newDateValue) => {
setNewDateValue(newDateValue);
}}
renderInput={(params) => <TextField {...params} />}
/>
“amountOfExercises”是一个 json 数组,在 forEach 中我正在提取我想要禁用的日期并将其推送到 selectedDates 数组。 完成此操作后,您会注意到要禁用的日期的背景颜色已更改,这意味着 DatePicker“知道”应该选择哪些日期。 为了让用户感觉 selectedDates 不可用于选择(禁用),我添加了 sx 属性,该属性提供浅灰色背景色和不允许的 cursor。
我的 coed 中 customDayRender 中的日期变量永远不会被读取,但是当我尝试删除它时,我遇到了一个错误,即 renderDay 方法找不到要渲染的日期
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.