我正在尝试将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"
...
);
}
这肯定不是最好的,或者是实现这一目标的唯一方法?我错过了什么?
Array.from()
将一个iterable对象转换为一个数组和一个可选的映射函数。您可以创建具有.length
属性的对象,如下所示:
return Array.from({length: this.props.level}, (item, index) =>
<span className="indent" key={index}></span>
);
下面是一些ES6功能的更多功能示例:
'use strict';
const React = require('react');
function renderArticles(articles) {
if (articles.length > 0) {
return articles.map((article, index) => (
<Article key={index} article={article} />
));
}
else return [];
}
const Article = ({article}) => {
return (
<article key={article.id}>
<a href={article.link}>{article.title}</a>
<p>{article.description}</p>
</article>
);
};
const Articles = React.createClass({
render() {
const articles = renderArticles(this.props.articles);
return (
<section>
{ articles }
</section>
);
}
});
module.exports = Articles;
更新:截至
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>
));
文档在这里解释关于JSX孩子
旧的:
您可以使用一个循环来代替
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
正如医生在这里说的
目前,在组件的渲染中,您只能返回一个节点;如果您有一个div列表要返回,您必须将组件包装在div、span或任何其他组件中。
问题内容: 我正在尝试将jQuery组件转换为React.js,而我遇到的困难之一是基于for循环渲染n个元素。 我了解这是不可能的,也不建议这样做,并且在模型中存在数组的地方使用它完全有意义。很好,但是当您没有数组时该怎么办?取而代之的是,您拥有一个等于要渲染的给定元素数量的数值,那么您应该怎么做? 这是我的示例,我想根据元素的层次结构级别为元素添加任意数量的span标签。因此,在第3级,我要在
问题内容: 你能告诉我如何在react js中渲染列表吗?我喜欢这样 问题答案: 您可以通过两种方式进行操作: 第一: 第二: 直接在返回中编写map函数
我想呈现一个消息数组: 此代码适用于: 但是如果我写这样的代码有什么区别: 这里,键在呈现时总是生成随机数。两个版本都适用于我的应用程序。 另外,如果我有1000条消息,那么如果在消息数组中添加了一条额外的消息-,是否所有消息都会重新提交当收到新的时,总是重新发布每条消息,这似乎是应用程序的一大负担。
问题内容: 我试图通过对象属性(此示例的名称)并在函数的轻松循环中列出它们。我发现这样做有些尴尬,但这似乎不正确。 这是我得到的: 有一个更好的方法吗?我只需要一个循环即可遍历对象数组,列出所需的属性并创建许多html节点之一。 问题答案: 您可以简单地在数组上 映射
我想显示从数组只有两个数据。数据是这样的: 0:名称:“jan”url:https://www.pet/event/imain5/" 1:名称:“willium”url:https://www.pet/event/imain6/" 2:名称:"petter"url:"https://www.pet/event/imain7/" 现在在我的代码中,它显示了从0到2的所有名称。 但我想显示前两个名称,
我创建了一个需要在应用程序的多个部分中单独显示的组件-(在我的导航内部、主页和单独的路由上)。因此,我在此组件中的一个use中进行了所有操作调度(用于读取数据的api调用)效果: 如您所见,此效果应该只运行一次(当组件装载时)。 在其他任何地方,我都不会在此组件内部或外部调度这些特定操作。 该组件在3个位置渲染(导航内部、其自身的时间路径和主组件内部)。我可以在导航内部同时在时间上渲染它,没有问题