如何遍历 React 组件中数组内对象的属性?

Posted

技术标签:

【中文标题】如何遍历 React 组件中数组内对象的属性?【英文标题】:How to loop through properties of objects inside of an array within a React component? 【发布时间】:2018-10-18 19:37:17 【问题描述】:

这是我的父组件的渲染函数:

  render() 
    const users = [
      'tom': 
        phone: '123',
        email: 'hotmail'
      ,
      'rob': 
        phone: '321',
        email: 'yahoo'
      ,
      'bob': 
        phone: '333',
        email: 'gmail'
      ,
    ];

    const list = users.map((user) =>
      (<User
        name=user
        phone=users.phone
        email=users.email
      />),
    );

    return <ul>list</ul>;
  

输出显示如下:

这里是子组件的渲染函数:

  render() 
    const 
      name,
      phone,
      email,
     = this.props;

    const info = [name, phone, email];

    const item = info.map((index) => (
      <li key=index>
         index 
      </li>
    ));

    return item;
  

如何让它与电话号码和电子邮件一起显示?不知道我做错了什么。谢谢。

【问题讨论】:

您的users 变量被分配了一个看起来更像对象的数组... 【参考方案1】:

起初这是无效的javascript

const users = [
  'tom': 
    phone: '123',
    email: 'hotmail'
  ,
  // ...
];

您应该定义一个数组或一个对象。假设您的 users 是一个对象文字:

const users = 
  'tom': 
    phone: '123',
    email: 'hotmail'
  ,
  // ...
;

然后你可以遍历对象的entries:

const list = Object.entries(users).map(([name, info]) =>
  (<User
    name=name
    phone=info.phone
    email=info.email
  />)
);

但是Object.entries() 并非在所有浏览器中都支持,请检查它是否适用于您的环境。

【讨论】:

【参考方案2】:

第一件事是users 不是一个有效的数组如果你想在主范围内使用键值对然后使用Object()

 render() 
        const users = 
          'tom': 
            phone: '123',
            email: 'hotmail'
          ,
          'rob': 
            phone: '321',
            email: 'yahoo'
          ,
          'bob': 
            phone: '333',
            email: 'gmail'
          ,
        ;

        const list = Object.keys(users).map((user) =>
          (<User
            name=user
            phone=users[user].phone
            email=users[user].email
          />),
        );

        return <ul>list</ul>;
      

【讨论】:

【参考方案3】:

您需要在 Parent 组件的 map 函数中引用“user”而不是“users”。 “user”变量的目的是表示数组中每个元素的当前实例。所以地图函数应该是这样的:

const list = users.map((user) =>
  (<User
    name=user
    phone=user.phone
    email=user.email
  />),
);

改为。

【讨论】:

【参考方案4】:

一种解决方案是将您的“列表”更改为实际列表:

const users = [
  
    name: 'tom',
    phone: '123',
    email: 'hotmail'
  ,
  
    name: 'rob,
    phone: '321',
    email: 'yahoo'
  ,
  
    name: 'bob',
    phone: '333',
    email: 'gmail'
  ,
];

现在用户 user.name 而不是 user

或者,创建一个以每个用户的名称为关键字的对象:

const users = 
  'tom': 
    phone: '123',
    email: 'hotmail'
  ,
  'rob': 
    phone: '321',
    email: 'yahoo'
  ,
  'bob': 
    phone: '333',
    email: 'gmail'
  ,
;

然后映射键:

const list = Object.keys(users).map((user) =>
  (<User
    name=user
    phone=users[user].phone
    email=users[user].email
  />),
);

【讨论】:

【参考方案5】:

应该修改您的 const 用户以映射它们。

 const users = [
            
            name: 'tom',
            phone: '123',
            email: 'hotmail',
          ,
          
            name:'rob',
            phone: '321',
            email: 'yahoo'
          ,
          
            name: 'bob',
            phone: '333',
            email: 'gmail'
          ,
    ];
    const list = users.map((usr =>
      (<User
        name=usr.name
        phone=usr.phone
        email=usr.email
      />),
    );

    return <ul>list</ul>;
  

【讨论】:

以上是关于如何遍历 React 组件中数组内对象的属性?的主要内容,如果未能解决你的问题,请参考以下文章

列表渲染 之 v-for遍历数组和对象(利用key属性实现高效更新)

如何使用 React JS 循环遍历 MongoDB 数组以呈现表?

如何遍历一个JS对象中的所有属性

React TypeScript 如何遍历一个对象?

angularjs怎么遍历每个对象的属性的值

5种js遍历对象属性的方法