首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用React组件中的.map从数据库数组中绘制多个元素?

使用React组件中的.map从数据库数组中绘制多个元素?
EN

Stack Overflow用户
提问于 2016-06-20 02:16:59
回答 2查看 2.7K关注 0票数 1

我正在学习React,并在呈现多个元素时遇到了问题。

问题是,我正在从Firebase检索array,它需要为数组中的每个项返回一个新的div和svg。我知道React只会呈现一个元素,所以我需要将我的内容放在一个包装器中,我已经这样做了。我还创建了一个变量,它使用.map()循环数组并为我创建这些元素。

我不明白的是,为什么它不为数组中的每个项返回一个新的div和svg?相反,它只创建了1div和svg?数组包含文件夹名称的列表。

任何帮助都将不胜感激。

代码语言:javascript
复制
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)返回以下屏幕快照。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-20 02:36:52

在你的输出..。currentObj.namearray.因此,如果希望为name数组中的每个元素创建div,也必须对其进行循环。

你可以这样做:

代码语言:javascript
复制
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.,这是一种未经测试的解决方案。可能会出现语法错误。

票数 1
EN

Stack Overflow用户

发布于 2016-06-20 02:34:08

编辑v2:您的数据输入的组织方式很有趣,如果您要从更高的级别创建此输入,那么重新组织它的组成方式可能是有效的,但是,从数据数组中解构项可以更容易地调用后续函数:

代码语言:javascript
复制
// 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

下面是您的代码可能是什么样子:

代码语言:javascript
复制
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>
    );
  }
}

如果这能解决你的问题请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37913813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档