如何在反应原生渲染中以无限循环返回数组项视图?

Posted

技术标签:

【中文标题】如何在反应原生渲染中以无限循环返回数组项视图?【英文标题】:How to return array item views in an infinity loop in react native render? 【发布时间】:2020-01-18 12:43:58 【问题描述】:

假设 list.length 为 5。我需要在无限循环中返回下面的视图。不在5的循环中。我想一个一个地遍历数组。当到索引4时,它应该再次指向0索引。这个过程应该递归执行。 在这里,它将在到达数组的最后一个索引后停止。 当“i”来到数组的最后一个索引时,我尝试设置“i=0”,但无法访问。 有没有办法在javascript中实现这个场景。

注意:我会将我的渲染方法的一些代码 sn-p 粘贴到我的 react native jsx 文件中。 欢迎任何cmets。

return this.state.list
      .map((item, i) => 
        if (i === this.state.currentIndex) 
          return (
            <Animated.View
              ...this.panResponder.panHandlers
              key=item.id
              style=[
                this.rotateAndTranslate,
                 height: SCREEN_HEIGHT - 120, width: SCREEN_WIDTH, padding: 10, position: "absolute" 
              ]
            >
              <Animated.View
                style=
                  opacity: this.likeOpacity,
                  transform: [ rotate: "-30deg" ],
                  position: "absolute",
                  top: 50,
                  left: 40,
                  zIndex: 1000
                
              >
              ....................more codes....................... 
              </Animated.View>

              <Image style= flex: 1, resizeMode: "contain", borderRadius: 20  source= uri: item.image  />
            </Animated.View>
          );
        else
           return something;
        

    ).reverse();

【问题讨论】:

看起来您想要循环播放动画。 facebook.github.io/react-native/docs/animated#loop 【参考方案1】:

我认为您需要一个在单击 5 次后重新加载的功能组件..

// Get a hook function
const useState, useEffect = React;

const Example = (title) => 
  const [count, setCount] = useState(0);
  
  const [compCount, setCompCount] = useState(0);
  return (
    <div>
    <GetComp value=compCount/>
      <button onClick=() => 
        setCount(count+1);
        if(count % 5 ==0 && count != 0)
          setCompCount(compCount + 5)
        
      >
        Click me
      </button>
    </div>
  );
;

const GetComp = props => 
  return [1,2,3,4,5].map(e => <div> e+props.value </div>)


// Render it
ReactDOM.render(
  <Example title="Example using Hooks:" />,
  document.getElementById("react")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="react"></div>

【讨论】:

【参考方案2】:

像这样修改i 不会对下一次迭代产生任何影响,因为它是传递给map 的函数中的一个参数。如果你想像这样操作i,你应该使用在循环体范围之外定义i的循环。

类似

let i = 0;
while (i < this.state.list.length) 
  if (something) 
    i++;
   else 
    i = 0;
  

要准确理解您要完成的工作有点困难,但希望这有助于消除一些困惑。

【讨论】:

这个逻辑是正确的。但问题是用这个迭代返回我的数组。在地图函数中,我可以将其返回为“return myArray.map();”。使用这个 while 和 for 循环时我能做什么? 您可以推送到您在循环外定义的数组,然后返回该数组 没什么好推的。您能否检查我的示例并使用数组的返回视图编辑您的答案。这将是一个很大的帮助。在循环内返回数组不是我想要的。

以上是关于如何在反应原生渲染中以无限循环返回数组项视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在渲染时计算数组 [Vue.js] - 无限循环错误

从消费者 componentDidMount 更新反应上下文会导致无限重新渲染

如何在反应中超过最大更新深度

“错误:重新渲染过多。React 限制了渲染次数以防止无限循环。”

尝试根据值设置不同的数组。错误:组件渲染函数中可能存在无限更新循环

如何从无限重新渲染中停止反应组件