У вас есть два setToday
метода. В useEffect
вы хотите вызвать что-то вроде этого:
useEffect(() => {
...
setToday(createToday());
...
},{})
createToday = () => {
const today = new Date();
return {
day: today.getDate(),
month: today.getMonth(),
year: today.getFullYear(),
};
}
Прямо сейчас, когда вы звоните setToday()
в useEffect
, я, честно говоря, не знаю, устанавливаете ли вы состояние переменная, от today
до null
или вы вызываете свой вспомогательный метод, возвращая объект, но не назначая его.
Кроме того, имейте в виду useEffect
для побочных эффектов (отсюда и название), такие как обращение к службам, выполнение асинхронных действий и т. д. c.
Вы можете пропустить useEffect
и просто запустить createToday
в своем определении состояния:
const [today, setToday] = useState(createToday());
Пример того, как я могу это сделать:
const createToday =()=>{
const today = new Date();
return {
day: today.getDate(),
month: today.getMonth(),
year: today.getFullYear(),
};
}
const EventCalendar = (/*no props yet*/)=> {
const [today, setToday] = useState(createToday());
const calendar = new Calendar({siblingMonths: true, });
const renderCalendarDays = ()=>{
return getDaysWithEvents().map((day, index) => {
const isToday = Calendar.interval(day, today) === 1;
return (
<CalendarDay
day={day}
isToday={isToday}
/>
);
});
}
return (
<div className="flexContainer">
{renderCalendarDays()}
</div>
);
}