在您的 nextHandler() 中将 setState 更改为:
this.setState({
currentSlide: this.state.currentSlide + 1,
nextDisabled: this.state.currentSlide + 1 === this.props.slides.length - 1,
prevDisabled: false,
});
考虑到您的应用程序的简单性,您不需要 prevState - 您也不需要在 return 中定义每个 state 字段(react 将隐式填充它们作为它们的最后一个值):
// 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() 应用类似的修复。