React не отображает массив / объект в список по умолчанию. Вы должны быть явными в своем коде.
Ваша первая попытка «закрыть» для исправления, однако вы можете заметить, что ингредиенты и информация являются массивами объектов. это означает, что вы должны сгенерировать тег для каждого индекса.
Я использовал JSON .stringify для генерации уникального ключа, так как использование индекса для ключа является плохой практикой.
Код ниже показывает один из правильных подходов, использующих реагирование.
const data = [
{
name: "Crock Pot Roast",
imageURL: "https://via.placeholder.com/150",
information: [
{
date: "24 July 2019",
type: "Main dish",
difficulty: "Easy",
time: "~50"
}
],
ingredients: [
{
quantity: "1",
name: " beef roast",
type: "Meat"
}
]
}
];
const CardRecipe = ({data}) => {
const { name, imageURL, information, ingredients } = data;
return (
<div key={name}>
<span>{name}</span>
<div>
<div>
<img src={imageURL} alt={name} />
<div>
{information &&
information.map(info => {
const { date, type, difficulty, time } = info;
return (
<ul key={JSON.stringify(info)}>
<li> {date} </li>
<li> {type} </li>
<li> {difficulty} </li>
<li> {time} </li>
</ul>
);
})}
</div>
<div>
{ingredients &&
ingredients.map(ingredient => {
const { quantity, name, type } = ingredient;
return (
<ul key={JSON.stringify(ingredient)}>
<li> {quantity} </li>
<li> {name} </li>
<li> {type} </li>
</ul>
);
})}
</div>
</div>
</div>
<div>food ingredients</div>
<div>food recipe</div>
</div>
);
};
export default function App() {
const first_reciepe = data[0];
return (
<div className="App">
<CardRecipe data={first_reciepe} />
</div>
);
}
В качестве альтернативы, вы можете распечатать любые списки, отобразив один раз на массив, а затем на каждый объект / ключ, чтобы сгенерировать (x) количество <"li "> tags.
Пример:
const DoList = ({ data }) => {
return data.map(list => {
return (
<ul key={list}>
{Object.keys(list).map(key => {
const value = list[key];
return <li key={key}> {value} </li>;
})}
</ul>
);
});
};
Тогда вы будете использовать его столько раз, сколько захотите:
<DoList data={ingredients} />
<DoList data={information} />
<DoList data={...} />