如何使用React.js在JSX中循环对象

时间:2016-08-18 16:11:04

标签: javascript reactjs react-jsx jsx

所以我有一个React.js组件,我想循环遍历我导入的对象以向其添加HTML选项。这是我尝试过的,既丑陋又无效:

import React from 'react';
import AccountTypes from '../data/AccountType';

const AccountTypeSelect = (props) => {  
  return (
    <select id={props.id} className = {props.classString} style={props.styleObject}>
        <option value="nothingSelected" defaultValue>--Select--</option>
        {
            $.each(AccountTypes, function(index) {
                <option val={this.id}>this.name</option>
            })
        }
    </select>
  );
};

export default AccountTypeSelect;

我在控制台中从上面的代码中收到了此错误:

invariant.js?4599:38 - 未捕获的不变违规:对象作为React子对象无效(找到:具有键{id,name,enabled,additionalInfo}的对象)。如果您要渲染子集合,请使用数组,或使用React附加组件中的createFragment(object)包装对象。检查AccountTypeSelect的呈现方法。

我是否真的需要将每个对象转换为数组或使用createFragment将其包装起来使用它?这种情况的最佳做法是什么?

4 个答案:

答案 0 :(得分:7)

而不是$.each使用map

{AccountTypes.map(function(a) {
     return (
         <option key={a.id} val={a.id}>{a.name}</option>
     );
 })}

答案 1 :(得分:6)

注意事项:

您的数据位于Object中,而不是数组中:因此要遍历它,您必须使用Object.keys(yourObject).map()而不是yourObject.map()

考虑到这一点;这是解决方案

var user = {
     fname:'John',
     lname : 'Doe',
     email:'test@test.com'
}

class App extends Component {
  render() {
    return (
      <p>
      <ul>
        {
          Object.keys(user).map((oneKey,i)=>{
            return (
                <li key={i}>{user[oneKey]}</li>
              )
          })
        }

      </ul>    
      </p>
    );
  }
}

答案 2 :(得分:0)

您应该使用map循环:

{AccountTypes.map((accountType) => 
  <option value={accountType.id}>{accountType.name}</option>)}

答案 3 :(得分:0)

要呈现子项列表,您必须为每个子项添加byte myByte = 133; //Unnecessary. MyNumberMethod((Number)17.4, (Number)myByte); //This works just as fine. MyNumberMethod(17.4, myByte); 属性,以便React正确呈现它们。请尝试:

使用JQuery映射(适用于函数式编程)

key

使用法线贴图:

   {
        $.map(AccountTypes, function(type,index) {
            return <option key={type.id} val={type.id}>type.name</option>
        })
    }