gpt4 book ai didi

javascript - 如何在没有要映射的对象数组的情况下循环和渲染 React.js 中的元素?

转载 作者:IT王子 更新时间:2023-10-29 02:37:47 27 4
gpt4 key购买 nike

我正在尝试将 jQuery 组件转换为 React.js,我遇到的困难之一是基于 for 循环呈现 n 个元素。

我知道这是不可能的,也不推荐这样做,并且在模型中存在数组的情况下,使用 map 是完全有意义的。很好,但是如果没有数组怎么办?相反,您的数值等于给定数量的要渲染的元素,那么您应该怎么做?

这是我的示例,我想根据元素的层次结构为元素添加任意数量的 span 标记作为前缀。所以在第 3 级,我想要在文本元素之前有 3 个 span 标签。

在 JavaScript 中:

for (var i = 0; i < level; i++) {
$el.append('<span class="indent"></span>');
}
$el.append('Some text value');

我似乎无法理解这个,或者任何类似于在 JSX React.js 组件中工作的东西。相反,我必须执行以下操作,首先构建一个长度正确的临时数组,然后循环该数组。

react .js

render: function() {
var tmp = [];
for (var i = 0; i < this.props.level; i++) {
tmp.push(i);
}
var indents = tmp.map(function (i) {
return (
<span className='indent'></span>
);
});

return (
...
{indents}
"Some text value"
...
);
}

这肯定不是最好的,或者是实现这一目标的唯一方法?我错过了什么?

最佳答案

更新:截至 React > 0.16

Render 方法不一定要返回单个元素。也可以返回一个数组。

var indents = [];
for (var i = 0; i < this.props.level; i++) {
indents.push(<span className='indent' key={i}></span>);
}
return indents;

return this.props.level.map((item, index) => (
<span className="indent" key={index}>
{index}
</span>
));

Docs here explaining about JSX children


旧:

你可以用一个循环代替

var indents = [];
for (var i = 0; i < this.props.level; i++) {
indents.push(<span className='indent' key={i}></span>);
}
return (
<div>
{indents}
"Some text value"
</div>
);

您还可以使用 .map和花哨的 es6

return (
<div>
{this.props.level.map((item, index) => (
<span className='indent' key={index} />
))}
"Some text value"
</div>
);

此外,您必须将返回值包装在容器中。我在上面的例子中使用了 div

正如文档所说 here

Currently, in a component's render, you can only return one node; if you have, say, a list of divs to return, you must wrap your components within a div, span or any other component.

关于javascript - 如何在没有要映射的对象数组的情况下循环和渲染 React.js 中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29149169/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com