在 MUI StaticDatePicker 日历中突出显示日期
<p>我正在尝试将 MUI StaticDatePicker 实现到我的 React 网站。我想要的是使用蓝色圆圈或徽章突出显示日历中的几天。我尝试了各种方法来实现这一点,但我无法获得日历中突出显示的日期输出。如果有人知道该怎么做,请帮助我。在下面的代码中,我尝试突出显示日历中的highlightDays状态值。</p>
<p>我在我的网站中使用了dayjs库处理时间和日期相关的数据。但无论出于什么原因,我看不到我的 renderDay 正在运行。最后,我想要实现的是阻止今天之前的日期,即当前日期之前的日期,并在日历中突出显示即将发生的活动日期。</p>
<pre class="brush:php;toolbar:false;">import { React, useState } from "react";
import dayjs from "dayjs";
import { Box, TextField } from "@mui/material";
import { Loading } from "../pages/index.mjs";
import { EventCard } from "./index.mjs";
import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
import { StaticDatePicker } from "@mui/x-date-pickers/StaticDatePicker";
import { useReadAllEvent } from "../hooks/useEvent.mjs";
import { PickersDay } from "@mui/x-date-pickers";
import { Badge } from "@mui/material";
const SessionBooking = ({ doctor }) => {
const [value, setValue] = useState("");
const [highlightDays, setHighlightDays] = useState([
"2023-06-01",
"2023-06-02",
"2023-06-04",
]);
console.log(value);
const { data: eventSet, isLoading } = useReadAllEvent({
onSuccess: (message) => {},
onError: (message) => {},
session: { id: doctor, today: dayjs().format("YYYY-MM-DD") },
});
if (isLoading) return <Loading />;
console.log(eventSet);
const events = eventSet.map(
({ key, countPatient, start, end, maxPatients }) => (
<EventCard
key={key}
started={start}
ended={end}
patients={countPatient}
max={maxPatients}
/>
)
);
return (
<Box
mt={2}
sx={{
display: "grid",
gridTemplateColumns: {
xs: "repeat(1, 1fr)",
sm: "repeat(1, 1fr)",
md: "repeat(2, 1fr)",
},
gap: 1,
}}
>
<Box>
<LocalizationProvider dateAdapter={AdapterDayjs}>
<StaticDatePicker
orientation="portrait"
openTo="day"
value={value}
onChange={(newValue) => {
setValue(newValue);
}}
renderInput={(params) => <TextField {...params} />}
renderDay={(day, _value, DayComponentProps) => {
const isSelected =
!DayComponentProps.outsideCurrentMonth &&
highlightDays.includes(dayjs(day).format("YYYY-MM-DD"));
return (
<Badge
key={day.toString()}
overlap="circular"
badgeContent={isSelected ? "-" : undefined}
color="primary"
>
<PickersDay {...DayComponentProps} />
</Badge>
);
}}
/>
</LocalizationProvider>
</Box>
<Box>{events}</Box>
</Box>
);
};
export default SessionBooking;</pre>
<pre class="brush:php;toolbar:false;"></pre></p>
就像 steve 所说的
在新版本中不接受 renderDay 属性。相反必须使用插槽。 StaticDatePicker 的代码