Javascript 在setState中递减计数器
我正在制作一个带有三个图像的滑块。对于本幻灯片的“后退”按钮,应从最后一张图像开始,然后返回到1。当控制台记录时,下面的代码从3递减到2,但未命中1,因此3 2 3 2。。。我不明白为什么?有什么问题吗Javascript 在setState中递减计数器,javascript,reactjs,function,Javascript,Reactjs,Function,我正在制作一个带有三个图像的滑块。对于本幻灯片的“后退”按钮,应从最后一张图像开始,然后返回到1。当控制台记录时,下面的代码从3递减到2,但未命中1,因此3 2 3 2。。。我不明白为什么?有什么问题吗 this.state = { imageCount: 0, } previousSlide() { this.setState({ imageCount: 3 }); if (this.state.imageCount === 3) {
this.state = {
imageCount: 0,
}
previousSlide() {
this.setState({
imageCount: 3
});
if (this.state.imageCount === 3) {
this.setState((prevState) => ({
imageCount: (prevState.imageCount - 1 )
}));
}
console.log("previousSlide", this.state.imageCount)
}
最简单的解决方案就是在setState内部执行逻辑,这样您只需调用它一次:
previousSlide() {
this.setState({imageCount} => (
{imageCount: imageCount === 0 ? 3 : imageCount - 1}
);
}
}
此代码将始终将imageCount设置为比以前小1,除非它为0,在这种情况下,它将循环为3。因为您始终将状态设置为
3
,然后直接将其递减为2
。如果是1
,则只需设置为3
:
previousSlide() {
this.setState(previous => ({
imageCount: Math.max(previous.imageCount - 1, 0) || 3
}));
}