我尝试将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"
...
);
}
这肯定不是最好的,或者唯一的方法吧?我错过了什么?
6条答案
按热度按时间bkkx9g8r1#
更新:截至React〉0.16
Render方法不一定要返回单个元素。也可以返回数组。
或
此处的文档解释了JSX子项
旧版本:
您可以改用一个循环
您还可以使用.map和花哨的es6
此外,还必须将返回值 Package 在容器中。
正如文档中所说的here
目前,在组件的呈现中,只能返回一个节点;比如说,如果要返回div列表,则必须将组件 Package 在div、span或任何其他组件中。
cwdobuhd2#
以下是包含一些ES6功能的功能示例:
agxfikkp3#
Array.from()
接受一个可迭代对象以转换为数组和一个可选的map函数。您可以使用.length
属性创建一个对象,如下所示:fdbelqdn4#
我使用
Object.keys(chars).map(...)
循环渲染ctrmrzij5#
如果您 * 负担得起 * 创建一个临时数组,您仍然可以使用
map
:这是因为
new Array(n).fill(x)
创建了一个大小为n
的数组,其中填充了x
,然后x
可以帮助map
。ahy6op9u6#
我认为这是在react js中循环的最简单方法