警告:列表中的每个孩子都应该有一个唯一的“关键”道具

Posted

技术标签:

【中文标题】警告:列表中的每个孩子都应该有一个唯一的“关键”道具【英文标题】:Warning: Each child in a list should have a unique "key" prop 【发布时间】:2019-08-04 20:06:00 【问题描述】:

我正在使用 google 图书 API 构建一个应用程序,我似乎正在向列表中的每个孩子传递一个唯一的密钥,但错误不会消失。我一定是做错了什么,但我不确定是什么。

const BookList = (props) => 

//map over all of the book items to create a new card for each one in 
the list
    const books = props.books.data.items.map((book) =>  
        console.log(book.id)
        return (
            <div className="col col-lg-4 grid-wrapper">
                <BookCard 
                    key=book.id
                    image=book.volumeInfo.imageLinks.thumbnail
                    title=book.volumeInfo.title 
                    author=book.volumeInfo.authors[0] 
                    description=book.volumeInfo.description
                    previewLink=book.volumeInfo.previewLink
                    buyLink=book.saleInfo.buyLink
                />
            </div>
        ); 
    )

    return (
        <div>books</div>
    );

请注意,在 const book 中返回后,我有一个 console.log(book.id),它将在控制台中显示所有 10 个唯一 id 键。但是当我尝试使用 key=book.id 将它传递给这个组件的子组件时,我得到了这个错误。

【问题讨论】:

【参考方案1】:

key 需要放在最外层的返回元素上。在你的具体情况下,这意味着改变这个:

            <div className="col col-lg-4 grid-wrapper">
                <BookCard 
                    key=book.id

到这里:

            <div className="col col-lg-4 grid-wrapper" key=book.id>
                <BookCard 

【讨论】:

做到了!键必须在最外层返回的元素上是否有特定原因? 当 React 遍历一个数组时,它只会直接查看里面的东西。它不会在寻找密钥的过程中一直递归。如果是这样,它会 (1) 很慢,并且 (2) 在存在嵌套数组时会导致歧义。 出色的解决方案

以上是关于警告:列表中的每个孩子都应该有一个唯一的“关键”道具的主要内容,如果未能解决你的问题,请参考以下文章

如何修复警告:列表中的每个孩子都应该有一个唯一的“关键”道具

添加了关键道具 ||警告:列表中的每个孩子都应该有一个唯一的“关键”道具

React - 警告:列表中的每个孩子都应该有一个唯一的“关键”道具

警告:列表中的每个孩子都应该有一个唯一的“关键”道具。反应.js

警告:列表中的每个孩子都应该有一个唯一的“关键”道具

如何找到警告的原因:列表中的每个孩子都应该有一个唯一的“关键”道具