Устранение проблемы с уникальной опорой ключей

У меня проблема с консолью Each child in a list should have a unique "key" prop., которая мешает моей тележке. Я создал ее копию https://codesandbox.io/s/quiet-http-8yhkp

import React,{useState, useEffect, useContext} from 'react'
import './Home.css'
import Books from './Books'
import { BookContext } from "../../context/books";
const Home = () => {
   const {data, handleSelectCategory, currentSelectedCategory } =useContext(BookContext)
    return (
        <div className='books__container' >
          <h1 className='categories'>Categories</h1>
            {Object.keys(data).map((key, index)=>{
            let books = data[key];
            return (
              <> 
              <span key = {key} onClick = {() => handleSelectCategory(key)} className='books__list' >
              {books[0].category}
              </span>         
             </>
              );})}
              <Books category = {currentSelectedCategory} />
        </div>
    )
}

export default Home

В вашем CodeSandbox отсутствует часть "код"

Phil 30.03.2021 01:59

вы получаете ошибку, потому что, когда вы используете карту, вы помещаете ключ в диапазон, но у вас есть диапазон, окруженный фрагментом .... например, этот <> span с ключом здесь </> Избавьтесь от тегов фрагментов, которые вы не используете они мне не нужны

Talmacel Marian Silviu 30.03.2021 02:03

Ключи могут быть предоставлены React.Fragment (не его сокращению), но в вашем коде вы можете удалить фрагмент. См. Этот ответ, чтобы понять ключи: stackoverflow.com/a/66703936/2873538

Ajeet Shah 30.03.2021 02:05

@ Он забыл сохранить код, мой плохой

mura1 30.03.2021 02:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
29
1

Ответы 1

Вам необходимо предоставить ключ к самому внешнему элементу JSX. Вы также можете

  1. Удалите теги <> </> (лучший выбор)
return (
   <span key = {key} onClick = {() => handleSelectCategory(key)} className='books__list' >
     {books[0].category}
   </span>         
   )
  1. Используйте React.Fragment, чтобы применить ключевую опору
return (
  <React.Fragment key = {key}>
   <span key = {key} onClick = {() => handleSelectCategory(key)} className='books__list' >
     {books[0].category}
   </span>
  </React.Fragment>         
 )

Другие вопросы по теме