Я хочу повторить один элемент изображения в 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>
Как я могу использовать цикл для генерации этого кода?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете создать короткую функцию, чтобы сделать это за вас
let func = () => (<Image source = {require('../images/image.png')} />)
<View>
{func()}
{func()}
{func()}
{func()}
{func()}
</View>
Вы можете добавить цикл или выполнить дополнительные рефакторинги оттуда.
Легкий! Вы можете создать массив на лету. Нравится:
<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?
Вы можете сохранить его в переменной, прежде чем вернуть свой jsx.
Пример:
const myjsx = [];
for(let i = 0; i < 4; i++) {
myjsx.push(<Image source = {require('../images/image.png')} />);
}
затем в своем последнем JSX вы просто распечатываете {myjsx}
<View>
{myjsx}
</View>
Попробуй это:
const totalImages = 10;
<View>
{
(new Array(totalImages)).fill(<Image source = {require('../images/image.png')}/>)
}
</View>
<View>
{() => {
const
longArray = new Array(7),
image = require('../images/image.png');
return longArray.map((k, i) => <Image key = {k} source = {image} />);
}}
</View>
Вы можете создать функцию, которая выполняет цикл и возвращает рассматриваемые элементы.
renderImages() {
var images = [];
for (var i = 0; i < numrows; i++) {
images.push(<Image source = {require('../images/image.png')} />);
}
return images;
}
В методе рендеринга вы просто вызываете имя функции как таковое:
{renderImages()}
Также не забудьте предоставить ключ.