我正在学习React,并在呈现多个元素时遇到了问题。
问题是,我正在从Firebase检索array,它需要为数组中的每个项返回一个新的div和svg。我知道React只会呈现一个元素,所以我需要将我的内容放在一个包装器中,我已经这样做了。我还创建了一个变量,它使用.map()循环数组并为我创建这些元素。
我不明白的是,为什么它不为数组中的每个项返回一个新的div和svg?相反,它只创建了1div和svg?数组包含文件夹名称的列表。
任何帮助都将不胜感激。
class SidebarPrivateFolders extends React.Component {
constructor(props) {
super(props)
}
render() {
let list = this.props.data.map((currentObj) => {
return (
<div>
<svg className="sidebar-icon">
<use xlinkHref={currentObj.xlinkHref}></use>
</svg>
<div className="public-folders">{currentObj.name}</div>
</div>
);
});
return (
<div className="sidebar-section">
<div className="sidebar-section-wrapper">
{list}
</div>
</div>
);
}
}Console.log(this.props.data)返回以下屏幕快照。

发布于 2016-06-20 02:36:52
在你的输出..。currentObj.name是array.因此,如果希望为name数组中的每个元素创建div,也必须对其进行循环。
你可以这样做:
class SidebarPrivateFolders extends React.Component {
constructor(props) {
super(props)
}
render() {
let list = this.props.data.map((currentObj) => {
return currentObj.name[0].map((innerArray,i) => {
return (
<div key={i}>
<svg className="sidebar-icon">
<use xlinkHref={currentObj.xlinkHref}></use>
</svg>
<div className="public-folders">{currentObj.innerArray[i]}</div>
</div>
);
});
});
return (
<div className="sidebar-section">
<div className="sidebar-section-wrapper">
{list}
</div>
</div>
);
}P.S.,这是一种未经测试的解决方案。可能会出现语法错误。
发布于 2016-06-20 02:34:08
编辑v2:您的数据输入的组织方式很有趣,如果您要从更高的级别创建此输入,那么重新组织它的组成方式可能是有效的,但是,从数据数组中解构项可以更容易地调用后续函数:
// Take out the name array and xlinkHref from data
let {xlinkHref, name} = this.props.data[0];
let list = name[0].map((name, i) => {
return (
<div key={'sidebar_'+i}>
<svg className="sidebar-icon">
<use xlinkHref={xlinkHref}></use>
</svg>
<div className="public-folders">{name}</div>
</div>
);
});没有数据样本的原始响应:
React内部差分算法的一部分要求生成的对象列表具有唯一的“键”属性。您需要将此属性添加到每个迭代器的包装分区中。
因此,在Map函数中,您可以跟踪映射索引的参数,并使用它将列表中的键保持为单独的。
这里有一个很好的解释:动态儿童部分:https://facebook.github.io/react/docs/multiple-components.html
下面是您的代码可能是什么样子:
class SidebarPrivateFolders extends React.Component {
constructor(props) {
super(props)
}
render() {
let list = this.props.data.map((currentObj, i) => {
return (
<div key={'sidebarlist_'+i}>
<svg className="sidebar-icon">
<use xlinkHref={currentObj.xlinkHref}></use>
</svg>
<div className="public-folders">{currentObj.name}</div>
</div>
);
});
return (
<div className="sidebar-section">
<div className="sidebar-section-wrapper">
{list}
</div>
</div>
);
}
}如果这能解决你的问题请告诉我。
https://stackoverflow.com/questions/37913813
复制相似问题