Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在setState中递减计数器_Javascript_Reactjs_Function - Fatal编程技术网

Javascript 在setState中递减计数器

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) {

我正在制作一个带有三个图像的滑块。对于本幻灯片的“后退”按钮,应从最后一张图像开始,然后返回到1。当控制台记录时,下面的代码从3递减到2,但未命中1,因此3 2 3 2。。。我不明白为什么?有什么问题吗

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
   }));
}