У меня есть компонент DayPicker
, который позволяет пользователю выбирать несколько дат.Я храню эти данные в массиве Date
объектов, которые отправляются редуктору, когда пользователь нажимает следующий в многоступенчатой форме.Однако, если я вернусь к этой форме, я не смогу добавить И удалить какие-либо даты.Вот как выглядит мой компонент
class StepThree extends Component {
static getDerivedStateFromProps = (nextProps) => {
const {
stepThree: { dates }
} = nextProps;
const shouldUpdate = dates.length !== 0;
if (shouldUpdate) {
const newDates = dates.map(date => new Date(date));
return {
dates: newDates
};
}
return null;
};
state = {
dates: []
};
handleDayClick = (day, { selected }) => {
const { dates } = this.state;
if (selected) {
const selectedIndex = dates.findIndex(selectedDay => DateUtils.isSameDay(selectedDay, day));
dates.splice(selectedIndex, 1);
} else {
dates.push(day);
}
this.setState({ dates });
};
handleNext = (e) => {
e.preventDefault();
this.props.setStepThree(this.state.dates);
};
render() {
return (
<Col>
<Col style={{ textAlign: 'center' }}>
<DayPicker selectedDays={this.state.dates} onDayClick={this.handleDayClick} />
</Col>
<div
style={{
width: '100%',
position: 'fixed',
bottom: '0px',
zIndex: '100',
textAlign: 'center',
padding: '10px',
left: '0px'
}}
>
<PreviousButton handleClick={this.props.handlePrevious} />
<NextButton handleClick={this.handleNext} />
</div>
</Col>
);
}
}
. Когда я возвращаюсь в эту форму, я вижу, что новая дата передается в метод handleClick, но он не добавляется в массив.Состояние остается именем.
ПРИМЕЧАНИЕ. Это воспроизводимый шаблон после первого заполнения формы пользователем.После первого раза, это в основном не редактируемое.
Это код редуктора
case ACTIONS.SET_STEP_THREE: {
const newDates = action.dates.map(d => new Date(d));
return {
...state,
stepThree: {
...state.stepThree,
dates: newDates
}
};
}