如何在 JSX 中重复一个元素?

Posted

技术标签:

【中文标题】如何在 JSX 中重复一个元素?【英文标题】:How to repeat one element in JSX? 【发布时间】:2019-03-20 07:06:34 【问题描述】:

我想在 JSX 中重复一个图像元素,我需要的代码如下:

<View>
  <Image source=require('../images/image.png') />
  <Image source=require('../images/image.png') />
  <Image source=require('../images/image.png') />
  <Image source=require('../images/image.png') />
  <Image source=require('../images/image.png') />
</View>

如何使用循环来生成这段代码?

【问题讨论】:

【参考方案1】:

简单!您可以即时创建数组。像这样:

<View>
  [...Array(5)].map((x, i) => <Image key=i source=require('../images/image.png') />)
</View>

[...Array(5)] 给出:[undefined, undefined, undefined, undefined, undefined]。这可能看起来没用,但实际上,这让我们可以使用 map() 进行迭代,我们可以使用它来返回我们想要的组件(我们根本不需要 x)。

为了提高性能,您可以在渲染之外创建数组,以防止在每次重新渲染时重新创建临时数组。出于类似原因,您也可以将您的require 分开放置。

【讨论】:

另外请记得提供密钥。 您要添加密钥吗? 使用索引作为键会触发警告,但在这种情况下,这不是问题。 @EmileBergeron,不,不应该。它只会在您根本不提供时发出警告。您是指一些 lint-rule 吗?【参考方案2】:
<View>
    () => 
        const
            longArray = new Array(7),
            image = require('../images/image.png');
        return longArray.map((k, i) => <Image key=k source=image />);
    
</View>

【讨论】:

【参考方案3】:

您可以创建一个循环并返回相关元素的函数。

renderImages() 
    var images = [];
    for (var i = 0; i < numrows; i++) 
        images.push(<Image source=require('../images/image.png') />);
    
    return images;

在渲染方法中,您只需调用函数名称:

renderImages()

【讨论】:

【参考方案4】:

试试这个:

const totalImages = 10;
<View>
 
   (new Array(totalImages)).fill(<Image source=require('../images/image.png')/>)

</View>

【讨论】:

【参考方案5】:

您可以在返回 jsx 之前将其存储在变量中。

例子:

const myjsx = [];
for(let i = 0; i < 4; i++) 
   myjsx.push(<Image source=require('../images/image.png') />);

然后在您的最终 JSX 中,您只需打印出 myjsx

<View>
    myjsx
</View>

【讨论】:

【参考方案6】:

您可以创建一个简短的函数来为您执行此操作

let func = () => (<Image source=require('../images/image.png') />) <View> func() func() func() func() func() </View>

您可以从那里添加一个循环或执行其他重构。

【讨论】:

以上是关于如何在 JSX 中重复一个元素?的主要内容,如果未能解决你的问题,请参考以下文章

在 JSX 中附加元素的惯用方式 [重复]

如何在反应中从渲染函数返回一个空的jsx元素?

错误:JSX 表达式必须有一个父元素 [重复]

如何解决 Vue.js 中的“相邻 JSX 元素必须包含在封闭标记中”问题

如何在 Microsoft Teams 的任务模块中呈现 JSX 元素?

如何在 React JSX 中循环遍历数组中的某些项目 [重复]