当前位置: 首页 > 知识库问答 >
问题:

收到警告消息:列表中的每个孩子都应该有一个唯一的“键”道具。仅在浏览器中显示,不在文本编辑器控制台中显示。-React.js[重复]

闻人宜
2023-03-14

昨天面临下一个问题,不知道如何解决。如我所见,我所有的钥匙都是独一无二的...有人看到解决办法了吗?P. S.我已经在一个类似的问题上阅读了不同的解决方案,但仍然不知道如何让钥匙“独一无二”。

我的Navbar.js如下所示:

    import React, { useState } from 'react'
import { MenuItems } from './MenuItems'
import { Button } from "../Button"
import "./Navbar.css"
import { Link } from 'react-router-dom';


function Navbar() {

    // state = {clicked: false}


    const [click, setClick] = useState(false);
    const [button, setButton] = useState(true);

    const handleClick = () => setClick(!click);
    const closeMobileMenu = () => setClick(false);

    const showButton = () => {
        if (window.innerWidth <= 1100) {
            setButton(false);

        } else {
            setButton(true)
        }
    }

说问题就在下面的某个地方。。确切错误消息:警告:列表中的每个子项都应该有一个唯一的“键”属性。

检查Navbar的渲染方法。有关更多信息,请参阅https://reactjs.org/link/warning-keys。




 const navBarItems = (
<ul className={click ? 'nav-menu active' : 'nav-menu'}>


{MenuItems.map((item) => {

    return (
        <div to="" style={{ textDecoration: 'none' }} onClick={closeMobileMenu}>
            <li key={item.id}>
                <a className={item.cName} href={item.url}>
                    {item.title}
                </a>
            </li>
        </div>
    )
})}


</ul>
 )

window.addEventListener('resize', showButton);

return (
    <>
        <nav className="NavbarItems">
            <Link to='/' className="navbar-logo" onClick={closeMobileMenu} >
                <img src="/images/yokifyLogo.svg" alt="" />
            </Link>
            <div className="menu-icon" onClick={handleClick}>

                <i className={click ? 'fas fa-times' : 'fas fa-bars'}></i>

            </div>

            
                 
                <div>
                    {navBarItems}
                </div>
            



            <div className='nav-btn'>
                {button ? (
                    <div>
                        <Link to='/log-in' className='btn-link'>
                            <Button buttonStyle='btn--secondary'>Log in</Button>
                        </Link>
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        <Link to='/sign-up' className='btn-links' id='sign-up'>
                            <Button buttonStyle='btn--primary'>Sign up</Button>
                        </Link>

                    </div>
                ) : (
                        <Link to='/sign-up' className='btn-link' id='log-in'>
                            {/* <Button buttonStyle='btn--mob' buttonSize='btn--mobile'>Sign up</Button> */}
                        </Link>
                    )}


            </div>
        </nav>
    </>
);
// }

}

导出默认导航栏

基本JSON文件

export const MenuItems = [
    {
        id: 1,
        title: 'Partners',
        url: '/partners',
        cName: 'nav-links'
    },
    {
        id: 2,
        title: 'Contact',
        url: '/contact',
        cName: 'nav-links'
    },
    {
        id: 3,
        title: 'About',
        url: '/about',
        cName: 'nav-links'
    },
    {
        id: 4,
        title: 'Log in',
        url: '/log-in',
        cName: 'nav-links-mobile'
    },
    
];

共有1个答案

陈功
2023-03-14

钥匙必须在顶级标签中

{MenuItems.map((item) => {
    return (
        <div key={item.id} to="" style={{ textDecoration: 'none' }} onClick={closeMobileMenu}>
            <li>
...
 类似资料:
  • 问题内容: 我正在使用Google Books API构建应用,并且似乎正在向列表中的每个孩子传递唯一键,但是错误不会消失。我一定在做错事,但不确定。 请注意,在返回const books之后,我有一个console.log(book.id),它将在控制台中显示所有10个唯一的id键。但是,当我尝试使用key = {book.id}将其传递给该组件的子组件时,会出现此错误。 问题答案: 在需要去最

  • 在这个简单的React应用程序中,我不明白为什么我会收到以下警告信息: 警告:列表中的每个孩子都应该有一个唯一的“键”道具。 对我来说,似乎我把密钥放在了正确的位置,形式为key={item.login.uuid} 我怎样才能摆脱警告信息?把钥匙放在哪里合适? 应用程序。js 列表js

  • 我正在使用Nextjs开发一个电子商务网站,并正在查看myCart页面(订购物品列表) 代码为'http://localhost:5000/myCart'如下所示:myCart页面 我在导航栏中有一个购物车图标。当我点击它时,我被导航到我的购物车页面。已排序的列表将正确显示。但是在Dev工具中检查控制台时,我看到下面给出的警告。 同样,当我点击购物车图标时,页面会刷新并正确显示。此时,浏览器读取h

  • 我对如何创建一个简单的todo应用程序的反应和探索方式还不熟悉。我当前收到错误“警告:列表中的每个孩子都应该有一个唯一的“键”道具。”一切似乎都很好,但我一定是做错了什么。 如果有人能帮上忙,那就br太好了/解释为什么会发生这个错误,那就太好了。

  • 我正在使用GoogleBooksAPI构建一个应用程序,我似乎正在向列表中的每个孩子传递一个唯一的密钥,但错误不会消失。我一定是做错了什么,但我不知道是什么。 注意,在const books中返回后,我有一个控制台。日志(book.id),它将在控制台中显示所有10个唯一的id键。但是当我试图使用key={book.id}将它传递给这个组件的子组件时,我得到了这个错误。

  • 所以我想渲染数组,但它一直在说,警告:列表中的每个孩子都应该有一个唯一的“键”道具,即使它有唯一的键,我的数组包含三个元素,它甚至没有正确渲染第三个数组,按钮没有甚至因为某种原因第三李的工作。 更新:我从firebase获得的数据如下所示: 此代码将选择每个数据的标题 当我将鼠标悬停在“fikka-fikka”上时,“fikka-fikka”的按钮甚至不起作用。在ed sheeran和一个方向上,