如何使用 React.js 遍历 JSX 中的对象
How to loop through object in JSX using React.js
所以我有一个 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、名称、已启用、附加信息} 的对象)。如果您打算渲染子集合,请改用数组或使用 React 附加组件中的 createFragment(object) 包装对象。检查 AccountTypeSelect
.
的渲染方法
我真的需要将每个对象转换成数组或用 createFragment 包裹起来才能使用吗?这种情况下的最佳做法是什么?
而不是 $.each
使用 map
:
{AccountTypes.map(function(a) {
return (
<option key={a.id} val={a.id}>{a.name}</option>
);
})}
你应该使用地图循环:
{AccountTypes.map((accountType) =>
<option value={accountType.id}>{accountType.name}</option>)}
为了呈现子项列表,您必须为每个子项添加 key
属性,以便 React 将呈现它们 properly.Try 这个:
使用 JQuery 映射(适合函数式编程)
{
$.map(AccountTypes, function(type,index) {
return <option key={type.id} val={type.id}>type.name</option>
})
}
使用法线贴图:
{AccountTypes.map((type) => {
return <option key={type.id}
val={type.id}>
{type.name}
</option>
)}
注意事项:
您的数据在对象中,而不是在数组中:因此要遍历它,您必须使用 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>
);
}
}
所以我有一个 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、名称、已启用、附加信息} 的对象)。如果您打算渲染子集合,请改用数组或使用 React 附加组件中的 createFragment(object) 包装对象。检查 AccountTypeSelect
.
我真的需要将每个对象转换成数组或用 createFragment 包裹起来才能使用吗?这种情况下的最佳做法是什么?
而不是 $.each
使用 map
:
{AccountTypes.map(function(a) {
return (
<option key={a.id} val={a.id}>{a.name}</option>
);
})}
你应该使用地图循环:
{AccountTypes.map((accountType) =>
<option value={accountType.id}>{accountType.name}</option>)}
为了呈现子项列表,您必须为每个子项添加 key
属性,以便 React 将呈现它们 properly.Try 这个:
使用 JQuery 映射(适合函数式编程)
{
$.map(AccountTypes, function(type,index) {
return <option key={type.id} val={type.id}>type.name</option>
})
}
使用法线贴图:
{AccountTypes.map((type) => {
return <option key={type.id}
val={type.id}>
{type.name}
</option>
)}
注意事项:
您的数据在对象中,而不是在数组中:因此要遍历它,您必须使用 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>
);
}
}