我有一个 gallery ,每行可以展示很多书.该图库将一组书籍作为props ,并使用"itemsPerRow"props 将书籍分割成二维数组,然后循环遍历所有书籍,以网格状 struct 显示书籍.

export default function Gallery({ items, itemsPerRow, renderLink }) {

    itemsPerRow = itemsPerRow ?? 3
    const rows = chunk(items, itemsPerRow)

    const renderEmptyItems = (itemsToRender) => {
        const items = []
        for(let n = itemsToRender; n > 0; n--) {
            items.push(<GalleryItem key={`empty_${n}`} empty/>)
        }

        return items
    }

    return (
        <div>
        {
            rows.map((row, index) => (
                <div key={index} className="tile is-ancestor">

                    {row.map(item => <GalleryItem key={item.id} renderLink={renderLink} {...item}/>)}

                    {/* Add empty gallery items to make rows even */}
                    {index + 1 === rows.length && renderEmptyItems(itemsPerRow - row.length)}
                </div>
            ))
        }
        </div>
    )
}

然而,除非我给代表一行的每个div一个键,否则react会抱怨缺少键.据我所知,使用索引作为键实际上无助于做出react ,应该避免.那么我应该用什么来代替索引呢?

推荐答案

key个props 使用一个唯一的标识符(book.id,如果唯一的话可能是book.title).如果数据没有唯一标识符,可以使用index.

Javascript相关问答推荐

如何按预期聚合SON数据?

获取表格的左滚动位置

React Native平面列表自动滚动

在分区内迭代分区

React存档iframe点击行为

当promise 在拒绝处理程序被锁定之前被拒绝时,为什么我们会得到未捕获的错误?

使用useup时,React-Redux无法找到Redux上下文值

使用AJX发送表单后,$_Post看起来为空

窗口.getComputedStyle()在MutationObserver中不起作用

使用JavaScript重新排序行

无法读取未定义错误的属性路径名''

如何迭代叔父元素的子HTML元素

覆盖TypeScrip中的Lit-Element子类的属性类型

WP Bootstrap NavWaker:下拉菜单一次打开所有下拉菜单

NG/Express API路由处理程序停止工作

按下单键和多值

有效路径同时显示有效路径组件和不存在的路径组件

第一项杀死下一项,直到数组长度在javascript中等于1

更改agGRID/Reaction中的单元格格式

使用静态函数保存 node 前的钩子