Каждый дочерний элемент в массиве или итераторе должен иметь уникальную ключевую опору

Привет, я получаю предупреждение «Каждый дочерний элемент в массиве или итераторе должен иметь уникальную «ключевую» опору», когда я сопоставляю массив объектов.

Что я пытаюсь сделать? У меня есть массив объектов с переменными именами элементов, и я перебираю каждый элемент, чтобы отобразить его имя. В настоящее время я получаю вышеупомянутое предупреждение. Это работает, однако я хочу избавиться от предупреждения.

Пример данных с именем "items" массив объектов.

items = [{
             children: [{meshes:[10,11], name: 'item_1', index:1},
                        {meshes:[1,2], name: 'item_4', inde:4},],
             index: 0,
             default_name: items,}]

Ниже приведен код,

function Items(props) {
return (
    <ul className = "items_list">
        <div className = "itemss">
            {props.items.map((item) => {
                return (
                    <Item
                        item = {item}
                    />
                );
            })}
        </div>
    </ul>
);

}

Что я пробовал? Я понимаю, что при отображении каждого элемента мы должны предоставить уникальное ключевое свойство. поэтому я добавил индекс к методу .map, как показано ниже, {props.items.map((элемент, индекс) => { возвращение ( ); })}

Но это не работает... при нажатии кнопки "Назад" он останется на той же странице.

Так может кто-нибудь помочь мне понять, где я ошибаюсь. Или дайте ответ на это. Спасибо.

Уникальное свойство должно иметь имя «ключ», изменение «индекса» на «ключ» должно исправить это для вас.

rypskar 15.02.2019 09:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
1
74
2

Ответы 2

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

{props.items.map((item,index) => {
                console.info(index);
                return (
                    <Item
                        key = {index}
                        item = {item}
                    />
                );
            })}

Anti pattern

Вы не должны использовать показатель из карта для вашего ключа, это антипаттерн, это может привести к непредсказуемым результатам.

Пожалуйста, проверьте это:https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318

Вы должны использовать правильный уникальный идентификатор для своего ключа, например идентификатор БД или какой-либо уникальный идентификатор.

Этот Ключ используется внутри для идентификации DOM-элементы для рендеринга, а не для рендеринга снова.

Спасибо за ответ. правда, когда я регистрирую индекс, он начинается с 0. Однако он не позволяет вернуться на предыдущую страницу.

stackoverflow_user 15.02.2019 09:19

вам нужно удалить индекс из элементов и добавить его в свой итератор

function Items(props) {
return (
    <ul className = "items_list">
        <div className = "itemss">
            {props.items.map((item, index) => (
                    <Item
                        key = {index}
                        item = {item}
                    />
                );
            )}
        </div>
    </ul>
);

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