[英]Iterating through a JSON response in JSX Render for React.js
[英]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 - Uncaught Invariant Violation:對象無效作為React子對象(找到:具有鍵{id,name,enabled,additionalInfo}的對象)。 如果您要渲染子集合,請使用數組,或使用React附加組件中的createFragment(object)包裝對象。 檢查AccountTypeSelect
的render方法。
我是否真的需要將每個對象轉換為數組或使用createFragment將其包裝以使用它? 這種情況的最佳做法是什么?
而不是$.each
使用map
:
{AccountTypes.map(function(a) {
return (
<option key={a.id} val={a.id}>{a.name}</option>
);
})}
注意事項:
您的數據位於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>
);
}
}
你應該使用map循環:
{AccountTypes.map((accountType) =>
<option value={accountType.id}>{accountType.name}</option>)}
要呈現子項列表,必須為每個子key
添加key
屬性,以便React正確呈現它們。請嘗試:
使用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>
)}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.