reactjs - 为什么我收到没有唯一密钥的警告?
问题描述
这是我的渲染
render() {
let products = this.state.products
return (
<ul>
{products.map((product, index) => Product({ key: index, product: product }))}
</ul>
);
}
我正在使用唯一键,但仍然收到警告
警告:数组或迭代器中的每个孩子都应该有一个唯一的“key”道具。
解决方案
我看到了这个:
function Product(props) {
return (
<p key={props.key}>{props.product}</p>
)
}
function Main(props) {
let products = [ "foo", "bar", "baz"];
return (
<ul>
{products.map((product, index) => Product({key: index, product: product }))}
</ul>
);
}
ReactDOM.render(
<Main></Main>,
document.getElementById('example')
);
和这个:
function Product(props) {
return (
<p>{props.product}</p>
)
}
function Main(props) {
let products = [ "foo", "bar", "baz"];
return (
<ul>
{products.map((product, index) => (
<li key={index}>
{Product({product: product })}
</li>
))}
</ul>
);
}
ReactDOM.render(
<Main></Main>,
document.getElementById('example')
);
做你想要完成的事情。
如果我不得不猜测(我对这个解释没有很高的信心),我会怀疑 React 需要key
在子组件上使用一个 prop,以便它可以快速确定在状态更改时需要重新渲染哪些元素。因此,传递一个key
prop 并不会真正实现任何效果,除非它实际呈现为 UI。<p>
上面的两个示例分别是在和中渲染虚拟 DOM 的键<li>
。
推荐阅读
- c# - 如何在不使用 GC.Collect 的情况下删除对我的 com.interop 类的引用?
- javascript - 从 JavaScript 访问 ViewBag
- transactions - 如果 else 在事务方法中不起作用
- xamarin - 如何创建从 xamarin 表单到 android 和 ios 的联系人?
- clojure - 使用 core.async 延迟显示 http 请求微调器的惯用方法
- javascript - 多个下拉列表条件
- c# - 如何获取包含给定数据作为一部分的 SQL 数据
- c# - 该程序无法找到 MediatR 查询 ASP.Net Core 的处理程序
- c - 在c中水平翻转BMP图像
- c++ - C++ 工厂模式实现 - 示例、问题和关注点