React,列表中的每个 child 都应该有一个唯一的 "key" 道具
React, Each child in a list should have a unique "key" prop
我遇到过“列表中的每个 child 都应该有一个唯一的“关键”道具。”错误。
我的用户数据不是动态的,所以我使用静态 ID 作为唯一密钥道具。
const App = () => {
const meals = [
{
name: "Kimchi Fried Rice",
info: "Delicious kimch and fresh veggies with rice",
price: 10.99,
id: 1,
},
{
name: "Bibimbap",
info: "Fresh veggies with spicy sauce ",
price: 15.99,
id: 2,
},
{
name: "Ddeok bokki",
info: "Chewy rice cake stirred with spicy sauce",
price: 10,
id: 3,
},
{
name: "Son tofu",
info: "The softest tofu soup ever ",
price: 11.99,
id: 4,
},
];
// console.log(meals.map((a) => a.name));
return (
<div>
<Layout food={meals} />
</div>
);
};
const Layout = (props) => {
return (
<Card>
<div className={classes.frame}>
{props.food.map((menu) => (
<ul>
<li className={classes.name} key={menu.id}>
{menu.name}
</li>
<li className={classes.info}>{menu.info}</li>
<li className={classes.price}>{menu.price}$</li>
<Button>+Add</Button>
</ul>
))}
</div>
</Card>
);
};
我最初制作了这个代码
<li className={classes.name} key={menu.id}>
{menu.name}
</li>
<li className={classes.info} key={menu.id}>
{menu.info}
</li>
<li className={classes.price} key={menu.id}>
{menu.price}$
</li>
但是这个错误 -> Encountered two children with the same key, 1
.密钥应该是唯一的,以便组件在更新期间保持其身份。 Non-unique 键可能会导致 children 被重复 and/or 省略 — 该行为不受支持,可能会在未来的版本中更改。
我尝试使用 Math.random.().toString() 作为键,但它抛出了同样的错误。
谁能告诉我我做错了什么?
错误消息中的列表指的是 Array.map()
呈现的项目列表。在您的例子中,每个 menu
项都是一个 ul
元素,因此错误消息的“列表中的子项”指的是 ul
。将密钥移动到 ul
:
{props.food.map((menu) => (
<ul key={menu.id}>
<li className={classes.name}>
{menu.name}
</li>
<li className={classes.info}>{menu.info}</li>
<li className={classes.price}>{menu.price}$</li>
<Button>+Add</Button>
</ul>
))}
我遇到过“列表中的每个 child 都应该有一个唯一的“关键”道具。”错误。 我的用户数据不是动态的,所以我使用静态 ID 作为唯一密钥道具。
const App = () => {
const meals = [
{
name: "Kimchi Fried Rice",
info: "Delicious kimch and fresh veggies with rice",
price: 10.99,
id: 1,
},
{
name: "Bibimbap",
info: "Fresh veggies with spicy sauce ",
price: 15.99,
id: 2,
},
{
name: "Ddeok bokki",
info: "Chewy rice cake stirred with spicy sauce",
price: 10,
id: 3,
},
{
name: "Son tofu",
info: "The softest tofu soup ever ",
price: 11.99,
id: 4,
},
];
// console.log(meals.map((a) => a.name));
return (
<div>
<Layout food={meals} />
</div>
);
};
const Layout = (props) => {
return (
<Card>
<div className={classes.frame}>
{props.food.map((menu) => (
<ul>
<li className={classes.name} key={menu.id}>
{menu.name}
</li>
<li className={classes.info}>{menu.info}</li>
<li className={classes.price}>{menu.price}$</li>
<Button>+Add</Button>
</ul>
))}
</div>
</Card>
);
};
我最初制作了这个代码
<li className={classes.name} key={menu.id}>
{menu.name}
</li>
<li className={classes.info} key={menu.id}>
{menu.info}
</li>
<li className={classes.price} key={menu.id}>
{menu.price}$
</li>
但是这个错误 -> Encountered two children with the same key, 1
.密钥应该是唯一的,以便组件在更新期间保持其身份。 Non-unique 键可能会导致 children 被重复 and/or 省略 — 该行为不受支持,可能会在未来的版本中更改。
我尝试使用 Math.random.().toString() 作为键,但它抛出了同样的错误。
谁能告诉我我做错了什么?
错误消息中的列表指的是 Array.map()
呈现的项目列表。在您的例子中,每个 menu
项都是一个 ul
元素,因此错误消息的“列表中的子项”指的是 ul
。将密钥移动到 ul
:
{props.food.map((menu) => (
<ul key={menu.id}>
<li className={classes.name}>
{menu.name}
</li>
<li className={classes.info}>{menu.info}</li>
<li className={classes.price}>{menu.price}$</li>
<Button>+Add</Button>
</ul>
))}