如何在ReactJS中使用for循环在满足某些条件时更新状态?循环不需要遍历每个元素

巴尔蒂帕尔

我是React的新手,无法使用for循环。如果满足条件,则forloop增加计数。下面是我的代码:

 class CountWalls extends React.Component{
        constructor(props){
            super(props);
            this.state = {
                leftcount : 0,
                rightcount : 0
            }
        }
        componentDidMount(){
            const arr = [4, 1, 1, 3, 2];
            let max = 0;
            max = Math.max(...arr);
            if(arr[0] <= max){ this.setleft() }
            if(arr[arr.length - 1] <= max){ this.setright() }    
    
            for(var i = 1; i < arr.length; i++){
                if(arr[0] == max) break;
                if(arr[i]<=max && arr[i] > arr[i-1]){
                  this.setState({leftcount: this.state.leftcount + 1}); 
                 }
            }   
            for(var i = arr.length-2; i >=0; i--){
              if(arr[arr.length-1]==max) break;
              if(arr[i]<= max && arr[i] > arr[i+1]){
                this.setState({rightcount: this.state.rightcount + 1}); 
            }   
          }
        }
        setright = () =>{ 
            this.setState({rightcount: 1});    
        }
        setleft = () =>{ 
                this.setState({leftcount: 1});
        } 
        render(){
            return(
                <>
                 <h2>Right count: {this.state.rightcount}</h2>
                 <h2>Left count: {this.state.leftcount}</h2>
                </>
            );
        }
    }

输出为:Right count:1,Left Count:1,因为循环没有运行,并且值仅在函数setRight和setLeft中设置为1。map,filter方法返回一个新数组,这里不需要。如何使状态对象计数增加条件?

埃里奥·克罗(ÉlioCró)

第二个循环实际上执行两次。但是,您需要意识到这setState是异步的。

这意味着当您在this.state.rightcount循环内调用时,该值仍然0是因为setState尚未完成。

您可以使用变量存储rightCountleftCount并仅调用setState一次来解决此问题

class CountWalls extends React.Component{
  constructor(props){
      super(props);
      this.state = {
          leftcount : 0,
          rightcount : 0
      }
  }
  componentDidMount(){
      const arr = [4, 1, 1, 3, 2];
      let max = Math.max(...arr);
      let leftCount = 0;
      let rightCount = 0;

      if(arr[0] <= max){ leftCount = 1; }
      if(arr[arr.length - 1] <= max){ rightCount = 1; }

      for(let i = 1; i < arr.length; i++){
          if(arr[0] === max) break;
          if(arr[i]<=max && arr[i] > arr[i-1]){
              leftCount++;
          }
      }
      for(let i = arr.length-2; i >=0; i--){
          if(arr[arr.length-1] === max) break;
          if(arr[i]<= max && arr[i] > arr[i+1]){
              rightCount++;
          }
      }

      this.setState({
        rightcount: rightCount,
        leftcount: leftCount,
      });
  }

  render(){
      return(
          <>
           <h2>Right count: {this.state.rightcount}</h2>
           <h2>Left count: {this.state.leftcount}</h2>
          </>
      );
  }
}

您可以在此处了解更多信息:https : //medium.learnreact.com/setstate-is-asynchronous-52ead919a3f0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在JSON模式中使用oneOf以确保不需要JSON文件的某些字段

来自分类Dev

如何在 XSLT 中为每个循环运行直到满足某些条件

来自分类Dev

如何在Windows批处理中使用多条语句处理条件而不需要goto或call

来自分类Dev

满足某些条件时退出“ For Each”循环

来自分类Dev

删除python webscaping循环结果中不需要的元素

来自分类Dev

使用pyspark时如何在条件中使用for循环?

来自分类Dev

如果循环在不需要时重复自身

来自分类Dev

为什么在结束“循环”时“中断”不需要分号?

来自分类Dev

使用功能和for循环删除不需要的文本

来自分类Dev

while循环需要明确的条件,而for循环则不需要,为什么?

来自分类Dev

在haskell中使用foldl时不需要参数吗?

来自分类Dev

满足我的条件时如何退出循环?

来自分类Dev

在Xcode中使用gcc进行构建时,如何删除不需要的命令行选项?

来自分类Dev

如何在春季批处理中使用FlatFileItemReader忽略CSV中不需要的列

来自分类Dev

如何使用XML :: Twig跳过不需要的元素?

来自分类Dev

如何使用python从列表中删除不需要的元素

来自分类Dev

如何在python中使用for循环填充2d数组的每个元素

来自分类Dev

XSD如何在序列的所有成员中或不需要序列成员时需要子元素?

来自分类Dev

如何在Swift中使用for循环遍历元组数组

来自分类Dev

如何在C#中使用linq循环遍历xml?

来自分类Dev

如何在bash -c命令中使用遍历循环

来自分类Dev

如何在本机反应中使用for循环遍历数组?

来自分类Dev

每次遍历for循环时如何显示更新的GUI(使用Swingworker?)

来自分类Dev

如何使用本地存储并在不需要时删除

来自分类Dev

For循环遍历每个子元素

来自分类Dev

仅在满足条件时循环?

来自分类Dev

有没有编写不需要更新语句的for循环的标准方法?

来自分类Dev

如何在开发中不需要生产中需要的某些宝石/代码行

来自分类Dev

如何在开发中不需要生产中需要的某些宝石/代码行

Related 相关文章

  1. 1

    如何在JSON模式中使用oneOf以确保不需要JSON文件的某些字段

  2. 2

    如何在 XSLT 中为每个循环运行直到满足某些条件

  3. 3

    如何在Windows批处理中使用多条语句处理条件而不需要goto或call

  4. 4

    满足某些条件时退出“ For Each”循环

  5. 5

    删除python webscaping循环结果中不需要的元素

  6. 6

    使用pyspark时如何在条件中使用for循环?

  7. 7

    如果循环在不需要时重复自身

  8. 8

    为什么在结束“循环”时“中断”不需要分号?

  9. 9

    使用功能和for循环删除不需要的文本

  10. 10

    while循环需要明确的条件,而for循环则不需要,为什么?

  11. 11

    在haskell中使用foldl时不需要参数吗?

  12. 12

    满足我的条件时如何退出循环?

  13. 13

    在Xcode中使用gcc进行构建时,如何删除不需要的命令行选项?

  14. 14

    如何在春季批处理中使用FlatFileItemReader忽略CSV中不需要的列

  15. 15

    如何使用XML :: Twig跳过不需要的元素?

  16. 16

    如何使用python从列表中删除不需要的元素

  17. 17

    如何在python中使用for循环填充2d数组的每个元素

  18. 18

    XSD如何在序列的所有成员中或不需要序列成员时需要子元素?

  19. 19

    如何在Swift中使用for循环遍历元组数组

  20. 20

    如何在C#中使用linq循环遍历xml?

  21. 21

    如何在bash -c命令中使用遍历循环

  22. 22

    如何在本机反应中使用for循环遍历数组?

  23. 23

    每次遍历for循环时如何显示更新的GUI(使用Swingworker?)

  24. 24

    如何使用本地存储并在不需要时删除

  25. 25

    For循环遍历每个子元素

  26. 26

    仅在满足条件时循环?

  27. 27

    有没有编写不需要更新语句的for循环的标准方法?

  28. 28

    如何在开发中不需要生产中需要的某些宝石/代码行

  29. 29

    如何在开发中不需要生产中需要的某些宝石/代码行

热门标签

归档