Javascript React-使用贴图渲染对象数组

Javascript React-使用贴图渲染对象数组,javascript,arrays,reactjs,function,object,Javascript,Arrays,Reactjs,Function,Object,我正在尝试使用Map渲染一组对象,到目前为止,我只能将第一个项目渲染到浏览器中 我想我的.map函数出了点问题,但我对React和JS了解不够,无法找出问题所在 这是我的App.js文件: //import这里有东西 class App extends Component { constructor(props) { super(props); this.state = { items: [] }; this.componentWillMount

我正在尝试使用Map
渲染一组对象,到目前为止,我只能将第一个项目渲染到浏览器中

我想我的.map函数出了点问题,但我对React和JS了解不够,无法找出问题所在

这是我的App.js文件:

//
import
这里有东西

class App extends Component {
  constructor(props) {
    super(props);

    this.state = {
      items: []
    };
    this.componentWillMount = this.componentWillMount.bind(this);
  }

  componentWillMount() {
    fetch('THE-JSON-URL-IS-HERE')
    .then(res => res.json())
    .then(data => {
      this.setState({ items: data });
    });

 render() {

const { items } = this.state;

return (
  <div className="App">

    { items.map((item, num) => {
        return (
          <div className="people">

            <div className="elem">
              <p key={num}>{item.elems}</p>   
            </div>     

              <p key={num}><strong>{item.name}</strong></p>
              <p key={num}><small>{item.title}</small></p>             

            <div className="hidden">
              <p key={num}><small>{item.email}</small></p>
              <p key={num}><small><strong>Office: </strong>{item.office}</small></p>
            </div>
            {/* <p>{item.manager}</p> */}
          </div>

        );
    })}        
  </div>
    );
  }
}

export default App;

等等。Abby的信息就是我所呈现的所有信息。

因为您将数组和对象嵌套到第一个数组元素中,所以项目的长度是1,唯一的元素是Abby元素,其余数据嵌套在其中。要映射所有元素,
应如下所示:

[
  {
    "elems": "Pr",
    "name": "Abby Langdale",
    "title": "President",
    "email": "alangdale0@hubpages.com",
    "office": "Javanrud",
    "manager": ""
  },
  {
    "elems": "Vp",
    "name": "Johnnie Mouncey",
    "title": "Vice President",
    "email": "jmouncey0@cnet.com",
    "office": "Canto",
    "manager": ""
  },
  {
    "elems": "Vp",
    "name": "Concordia Burgwyn",
    "title": "VP Quality Control",
    "email": "cburgwyn0@dyndns.org",
    "office": "Zhoukou",
    "manager": ""
  },
  {
    "elems": "En",
    "name": "Prissie Sainsberry",
    "title": "Web Developer IV",
    "email": "psainsberry0@yellowbook.com",
    "office": "Tugu",
    "manager": null
  }
]
如果需要维护管理器之间的关系,可以向每个对象添加一个id,并从另一个对象引用它

  [
      {
        "elems": "Pr",
        "name": "Abby Langdale",
        "title": "President",
        "email": "alangdale0@hubpages.com",
        "office": "Javanrud",
        "manager": "",
        "id" : 1
      },
      {
        "elems": "Vp",
        "name": "Johnnie Mouncey",
        "title": "Vice President",
        "email": "jmouncey0@cnet.com",
        "office": "Canto",
        "manager": 1
      },
      ...
]

您需要一个filter helper函数来正确查找管理器的名称,但它应该可以工作。

因为您要将数组和对象嵌套到第一个数组元素中,所以项的长度为1,唯一的元素是Abby元素,其余数据嵌套在其中。要映射所有元素,
应如下所示:

[
  {
    "elems": "Pr",
    "name": "Abby Langdale",
    "title": "President",
    "email": "alangdale0@hubpages.com",
    "office": "Javanrud",
    "manager": ""
  },
  {
    "elems": "Vp",
    "name": "Johnnie Mouncey",
    "title": "Vice President",
    "email": "jmouncey0@cnet.com",
    "office": "Canto",
    "manager": ""
  },
  {
    "elems": "Vp",
    "name": "Concordia Burgwyn",
    "title": "VP Quality Control",
    "email": "cburgwyn0@dyndns.org",
    "office": "Zhoukou",
    "manager": ""
  },
  {
    "elems": "En",
    "name": "Prissie Sainsberry",
    "title": "Web Developer IV",
    "email": "psainsberry0@yellowbook.com",
    "office": "Tugu",
    "manager": null
  }
]
如果需要维护管理器之间的关系,可以向每个对象添加一个id,并从另一个对象引用它

  [
      {
        "elems": "Pr",
        "name": "Abby Langdale",
        "title": "President",
        "email": "alangdale0@hubpages.com",
        "office": "Javanrud",
        "manager": "",
        "id" : 1
      },
      {
        "elems": "Vp",
        "name": "Johnnie Mouncey",
        "title": "Vice President",
        "email": "jmouncey0@cnet.com",
        "office": "Canto",
        "manager": 1
      },
      ...
]

您需要一个filter helper函数来正确查找经理的姓名,但它应该可以工作。

请先尝试展平数组。您需要知道阵列将具有的最大级别数。展平后,您可以使用地图功能:

const flatItems = items.flat(3);    // flatten up to 3 levels
items.map((item, num) => {
        return ( <render your div> );
}
const flatItems=items.flat(3);//展平至3级
items.map((item,num)=>{
返回();
}

首先尝试展平阵列。您需要知道阵列将具有的最大层数。展平后,您可以使用地图功能:

const flatItems = items.flat(3);    // flatten up to 3 levels
items.map((item, num) => {
        return ( <render your div> );
}
const flatItems=items.flat(3);//最多展平3级
items.map((item,num)=>{
返回();
}

你有很多嵌套数组。你要么需要递归地展平这些数据,要么使用递归映射。方法还取决于你对嵌套项期望的输出,如果json示例是你的“数组”数据,你不是真的想呈现一个数组,而是一个继承人/对象图,你需要一些递归,而不是映射函数来呈现它。如果是这样的话,我建议修改你的标题和描述以清晰明了。你有很多嵌套数组。你要么需要递归地展平这个数据,要么使用递归映射。Approach还取决于嵌套项的预期输出,如果json示例是您的“数组”数据,您并不是真的要渲染数组,而是一个继承人/对象图,您需要一些递归,而不是映射函数来渲染它。如果是这样,我建议您修改标题和描述以保持清晰。谢谢!我感觉嵌套数组是问题的一部分。我将其展平,并能够渲染t他需要数据。谢谢!我感觉嵌套数组是问题的一部分。我将其展平并能够渲染数据。嘿,谢谢!我按照您的选项1展平了数组并渲染了数据。如果我必须维护管理者的关系,我会选择您的选项2。嘿,谢谢!我按照您的选项1展平了数组并渲染了数据。嘿,谢谢!我按照您的选项1展平了数组nd提供了数据。如果我必须维持经理之间的关系,我会选择你的选项2。