Внутри вашего nextHandler()
измените setState на это:
this.setState({
currentSlide: this.state.currentSlide + 1,
nextDisabled: this.state.currentSlide + 1 === this.props.slides.length - 1,
prevDisabled: false,
});
Учитывая простоту вашего приложения, вам не нужно prevState - вам также не нужно определять каждое состояние в поле возврата (response будет неявно заполнить их как последнее значение):
// This can be just prevState => since you aren't using props
this.setState((prevState, props) => {
if (prevState.currentSlide < this.props.slides.length - 1) {
return {
currentSlide: prevState.currentSlide + 1,
prevDisabled: false,
};
} else if (prevState.currentSlide === this.props.slides.length - 1) { // Issue is here
return {
nextDisabled: true,
prevDisabled: false, // Don't need to keep defining this
};
}
});
Причина, по которой это не сработало, заключается в том, что вы использовали следующее, чтобы проверить, должна ли кнопка быть отключена:
prevState.currentSlide === this.props.slides.length - 1
prevState будет на 1 счет меньше того, что вы намереваетесь. Для этого вам нужно использовать текущее состояние. Другим исправлением было бы изменить его на:
prevState.currentSlide + 1 === this.props.slides.length - 1
Вы можете применить аналогичное исправление к prevHandler()
.