Reactjs 使用相同的数组在react中迭代

Reactjs 使用相同的数组在react中迭代,reactjs,asynchronous,Reactjs,Asynchronous,在一个非常简单的应用程序中,我试图获得3个独特的评论。我有一个包含所有评论的数组(this.state.ervaringen)(现在测试大约10个),其中包含id、名称和评论本身 我想得到3个独特的评论(不是2个相同),我每隔5秒左右刷新一次) 所以,我有一个函数来检查现在显示的ID。如果随机化器命中其中一个,它将再次随机化,直到获得一个免费ID。该随机化器使用数组标识符来检查这一点。(如果数组包含1、3和4,并且随机化的结果是3。它必须再次运行,因此是while循环) 错误之处在于react是

在一个非常简单的应用程序中,我试图获得3个独特的评论。我有一个包含所有评论的数组(
this.state.ervaringen
)(现在测试大约10个),其中包含id、名称和评论本身

我想得到3个独特的评论(不是2个相同),我每隔5秒左右刷新一次)

所以,我有一个函数来检查现在显示的ID。如果随机化器命中其中一个,它将再次随机化,直到获得一个免费ID。该随机化器使用数组标识符来检查这一点。(如果数组包含1、3和4,并且随机化的结果是3。它必须再次运行,因此是while循环)

错误之处在于react是异步的(在初始化时,我有时会在show数组中得到相同的评论)。我现在已经发现了。。。但我不知道怎么解决它

我传递当前数组0-2(第一次开始时它是空的,我使用on componentdidmount初始化第一次运行以获得3个随机评论)

如果传递的数组为空,我将跳过检查,否则它将崩溃。但由于异步性,它在初始化时从不检查true

  SetPassReview = (ShowedReviews) => {
    // check if showed reviews already contain this ID, if it has, randomize again
    let AvailableReviews = this.state.Ervaringen // load all available reviews
    let ReviewToPass
      if (!ShowedReviews){

        while (!ShowedReviews.id.some(AvailableReviews[ReviewToPass].id)){
          //console.log('reviewids in print: '+ ShowedReviews[0].id + ShowedReviews[1].id + ShowedReviews[2].id + 'ID generated' + AvailableReviews[ReviewToPass].id)
          ReviewToPass = Math.floor(Math.random() * (AvailableReviews.length))
        }
      } else {
     
          ReviewToPass = Math.floor(Math.random() * (AvailableReviews.length))
      }

      return(AvailableReviews[ReviewToPass])
  } 
我调用此函数3次以加载第一次运行:

  SetInitialReviews = () => {
      let InitShowedReviews = [];
      console.log(InitShowedReviews)
      for (var i=0; i<3; i++) {
        let ObjectToAdd = this.SetPassReview(InitShowedReviews);
        
        InitShowedReviews.push(ObjectToAdd)

      }
}
SetInitialReviews=()=>{
让InitShowedReviews=[];
console.log(InitShowedReviews)

对于(var i=0;iHey Ferrox,您没有共享任何React代码。推送到数组不是异步的。所以我猜问题出在其他地方,但我需要实际查看您的React代码,比如在何处/how
InitShowedReviews
呈现。嗨,泽克,在for循环中,我调用函数来检查pa中是否存在审阅ssed数组。该数组在for循环中每次都会得到一次额外的检查。没有更多的代码。我还没有设置状态。我会在提交后执行此操作。因为我无法修复此wierd行为。我只在设置状态时在代码中稍后的体育场中使用initshowedreviews呈现数组。但是这部分我已经理解了而且成功了。
!ShowedReviews
总是会是
false
我很确定。但是除此之外,你不应该在for循环内调用
setState
;首先完全填充
InitShowedReviews
,然后在循环后调用
setState
。是的,你关于设置状态的位置是对的。但是为什么呢在检查中它总是会为false?因为当数组中有某个内容时,它应该为true?