Проблема: userMenuResponse
- это массив, тогда userMenuResponse.Profile
будет иметь C ошибку, вам нужно сначала получить доступ к объекту по индексу, т.е. userMenuResponse[0].Profile
Решение: Если вы переместите троичную область за пределы содержимого, вы можете гарантировать доступ к userMenuResponse[0]
. Затем вы можете отобразить меню как обычно. Fragment
используется для возврата одного узла в соответствии с соглашением о реакции.
return (
<div class="content-section implementation button-demo">
{userMenuResponse.length ? (
<Fragment>
<h1>NK{userMenuResponse[0].Profile}</h1>
{userMenuResponse.map((menu, id) => (
<div key={id}>
{menu.Menu} for {menu.Menu}
</div>
))}
</Fragment>
) : null}
</div>
);
Предложение для JSON data
[{
Menu: "Home"
Profile: "End User"
},
{
Menu: "Add Questions"
Profile: "End User"
},
{
Menu: "Modify Answers"
Profile: "End User"
}]
Предварительно обработайте его, чтобы уменьшить / нормализовать сохраненные / сохраненные JSON данные; может быть проще потреблять, если бы он имел эту форму
{
profile: string,
menus: string[]
}
IE
{
profile: "End User",
menus: [
"Home",
"Add Questions",
"Modify Answers"
]
}
const endUserData = [{
Menu: "Home",
Profile: "End User"
},
{
Menu: "Add Questions",
Profile: "End User"
},
{
Menu: "Modify Answers",
Profile: "End User"
}
];
const adminData = [{
Menu: "Home",
Profile: "Admin"
},
{
Menu: "Approve Questions",
Profile: "Admin"
},
{
Menu: "Approve Answers",
Profile: "Admin"
}
];
const normalizeData = data => data.reduce((data, item) => {
if (!data.profile) {
data.profile = item.Profile;
}
data.menus.push(item.Menu);
return data;
}, {
profile: '',
menus: []
});
console.log(normalizeData([]));
console.log(normalizeData(endUserData));
console.log(normalizeData(adminData));
Тогда функцию рендеринга можно немного упростить до
return (
<div class="content-section implementation button-demo">
<h1>NK{data.profile}</h1>
{data.menus.map((menu, id) => (
<div key={id}>
{menu.Menu} for {menu.Menu}
</div>
))}
</div>
);