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

独特的“关键”道具。警告我还有钥匙吗

燕星鹏
2023-03-14

我的控制台出现错误,

我的JSON在这里https://dev.justinblayney.com/wp-content/uploads/2020/12/main-menu.json_.zip

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

在我的页面上显示的是(所以他们都是独一无二的,所以WTF反应)

钥匙:2429钥匙:2430钥匙:3859钥匙:2421钥匙:2802钥匙:2428

另一方面,我发现使用函数获取JSON文件是一种糟糕的方式,我还收到内存泄漏警告,我在网上看到的每个教程都使用类或Axio

检查MyRoutes的渲染方法。看见https://reactjs.org/link/warning-keys了解更多信息。MyRoutes@http://localhost:3000/react wordpress headless/static/js/main。大块js:63:81分区Router@http://localhost:3000/react-wordpress-headless/static/js/0。大块js:35747:30BrowserRouter@http://localhost:3000/react-wordpress-headless/static/js/0。大块js:35367:35App@http://localhost:3000/react wordpress headless/static/js/main。大块js:94:1

    function MyRoutes() {
    
    const [myrt, setMyrt] = useState([]); 
  
    
    useEffect(() => {
        fetch("main-menu.json" ,{
      headers : { 
        'Content-Type': 'application/json',
        'Accept': 'application/json'
       }
    })
        .then(res => res.json())
    
        .then(json =>{
             setMyrt(json.items)}
              )
         });
        
    
    return (
        <>
            {Object.keys(myrt).map((ky, idx)=> (
            <>
             <h2>KEY: {myrt[ky].ID} </h2>
        <Route exact path={`/${myrt[ky].slug}`} component={Page} key={myrt[ky].ID}  /></>
            ))} 
        </>
  
    );
}

共有3个答案

邵博远
2023-03-14

您需要顶部组件/标记上的键,该组件/标记正在地图上渲染。示例:如果使用div

<div key={myrt[ky].ID} >
    <h2>KEY: {myrt[ky].ID} </h2>
    <Route exact path={`/${myrt[ky].slug}`} component={Page} />
</div>
向俊贤
2023-03-14

在列表子元素的第一级需要key属性,因此我认为在您的示例中,您的. map中的React片段需要有此键。

晁聪
2023-03-14

keyprop应该定义在最前面的元素上,在您的情况下是React。片段

function MyRoutes() {
  const [myrt, setMyrt] = useState([]);

  useEffect(() => {
    fetch('main-menu.json', {
      headers: {
        'Content-Type': 'application/json',
        Accept: 'application/json',
      },
    })
      .then((res) => res.json())

      .then((json) => {
        setMyrt(json.items);
      });
  });

  return (
    <>
      {Object.keys(myrt).map((ky, idx) => (
        <React.Fragment key={ky}>
          // ------------^
          <h2>KEY: {myrt[ky].ID} </h2>
          <Route exact path={`/${myrt[ky].slug}`} component={Page} key={myrt[ky].ID} />
        </React.Fragment>
      ))}
    </>
  );
}
 类似资料:
  • 我知道这个问题有很多答案,但我找不到一个能完全解决我问题的答案。我得到以下错误:

  • 我收到此错误消息,尽管我的列表元素确实有一个键:( 反应js:18745警告:数组或迭代器中的每个子级都应该有一个唯一的“key”属性。检查

  • 我收到这个警告: 警告:数组或迭代器中的每个子级都应具有唯一的“键”属性。检查EventsTable的渲染方法。有关更多信息,请参阅fb.me/react-warning-keys。 react-runtime-dev.js?8fefd85d334323f8baa58410bac59b2a7f426ea7: 21998警告:数组或迭代器中的每个孩子都应该有一个唯一的“键”道具。检查事件的渲染方法。

  • 我使用firebase作为数据库,使用Ionic React作为移动应用程序。我已经将firebase数据转换为数组,但当我想映射值时。它告诉我它应该有一个唯一的键,但我已经在元素的返回函数中放置了一个唯一的键。有人能告诉我我做错了什么吗?谢谢 下面是我将对象转换为数组的代码 作为回报 我得到的是

  • 我正在为一个看起来像这样的纸牌游戏制作一个反应大厅:大厅图像 每个名称和“kick”按钮都是一个react组件,我根据名称列表(该列表中的所有名称都是唯一的)呈现该组件。我认为,由于名称是唯一的,我可以使用名称作为键,但由于某些原因,我得到以下错误:错误消息 我做错了什么? 注意:我还尝试了为KickButton键做key={Player"1"},以使其与相应的PlayerIcon唯一,但错误仍然