Списки и ключи в React

Во-первых, давайте рассмотрим, как вы преобразовываете списки в JavaScript.

Учитывая приведенный ниже код, мы используем функцию map(), чтобы взять массив чисел и удвоить их значения. Мы присваиваем новый массив, возвращаемый map(), переменной, удвоенной и записываем в нее:

Этот код регистрирует [2, 4, 6, 8, 10] в консоли.

В React преобразование массивов в списки элементов почти одинаково.

Отображение нескольких компонентов

Вы можете создавать коллекции элементов и включать их в JSX, используя фигурные скобки {}.

Ниже мы прокручиваем массив чисел, используя функцию JavaScript map(). Мы возвращаем элемент <li> для каждого элемента. Наконец, мы назначим результирующий массив элементов listItems:

Мы включаем весь массив listItems внутри элемента <ul> и передаем его в DOM:

Этот код отображает список чисел от 1 до 5

Базовый компонент списка

Обычно вы должны отображать списки внутри компонента.

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

Когда вы запустите этот код, вам будет выведено предупреждение о том, что для элементов списка должен быть предоставлен ключ. «Ключ» — это специальный атрибут строки, который необходимо включить при создании списков. Мы обсудим, почему это важно в следующем разделе.
Давайте назначим ключ для наших элементов списка внутри numbers.map() и исправим недостающую ключевую проблему.


Ключи списков React

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

Лучший способ выбрать ключ — использовать строку, которая однозначно идентифицирует элемент списка среди всех остальных. Чаще всего вы будете использовать идентификаторы из ваших данных в качестве ключей:

Если у вас нет уникальных идентификаторов для отображаемых товаров, вы можете использовать индекс товара в качестве ключа:

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

Извлечение компонентов с помощью ключей

Ключи имеют смысл только в контексте массива.

Например, если вы извлекаете компонент ListItem, вы должны держать ключ в элементев массиве <ListItem /> , а не в корневом элементе <li> в самом элементе ListItem.

Пример: неправильное использование ключа

Пример: правильное использование ключа

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

Ключи, используемые в массивах, должны быть уникальными среди других. Однако им не обязательно быть глобально уникальными. Мы можем использовать те же ключи, когда мы создаем два разных массива:

Ключи служат подсказкой для React, но они не передаются вашим компонентам. Если вам нужно то же самое значение в вашем компоненте, пропустите его явно как props с другим именем:

В приведенном выше примере компонент Post может читать props.id, но не props.key.

Вложение map() в JSX

В приведенных выше примерах мы объявили отдельную переменную listItems и включили ее в JSX:

JSX позволяет встраивать любые выражения в фигурные скобки, чтобы мы могли встроить результат map():

Иногда это приводит к более четкому коду, но этим стилем  написание также можно злоупотреблять. Как и в JavaScript, вам решать, стоит ли извлекать переменную для удобочитаемости. Имейте в виду, что если тело map() слишком длинное, возможно, самое время извлечь компонент.

Leave a Reply

Добавить комментарий