Я создаю своего рода веб-страницу календаря и использую реагирование с Redux в качестве управления состоянием. Для работы с датами и временем я использую MomentJs. Я хочу пролистать разные месяцы года, что было реализовано довольно хорошо. Я сейчас заметил проблему. Когда я пытаюсь поехать в март в любой год, он пропускается, а апрель показывает. Другое дело, что я могу вернуться только к февралю любого года. Все остальные месяцы работают нормально, что действительно странно. Я использовал документацию моментов, чтобы выяснить, что не так, но, похоже, не могу понять это. Итак, мой компонент, где действие называется:
Компонент
...
handleChangeCalendarStateClick = type => {
switch (this.props.calendarType) {
case "month":
if (type === "next") {
//this.props.changeCalendarStateTest("next");
let month = this.props.calendarState.add(1, "M").format("YYYY/MM/DD");
this.props.changeCalendarState(month);
} else {
let month = this.props.calendarState.subtract(1, "M").format("YYYY/MM/DD");
this.props.changeCalendarState(month);
//this.props.changeCalendarStateTest("prev");
}
break;
case "week":
if (type === "next") {
console.log(this.props.calendarState);
this.props.changeCalendarState(this.props.calendarState.add(1, "w"));
} else {
this.props.changeCalendarState(this.props.calendarState.subtract(1, "w"));
}
break;
case "day":
if (type === "next") {
this.props.changeCalendarState(this.props.calendarState.add(1, "d"));
} else {
this.props.changeCalendarState(this.props.calendarState.subtract(1, "d"));
}
break;
default:
break;
}
}
...
Действие
...
export const changeCalendarStateAction = state => {
return {
type: changeCalendarState, payload: { "state": state }
}
}
...
Редуктор
const initialState = {
...
calendarState: moment(),
...
}
...
case changeCalendarState: {
return {
...state,
calendarState: moment(action.payload.state)
}
}
...
Теперь наступает действительно странная часть, это действие / редуктор работает для Week
и Day
представлений. (Как в гугл календаре). В этих представлениях навигация к марту и прошлому февралю работает как надо. Это только в представлении Month
это не так.