Освойте списки и ключи в React

Рендеринг списков в React прост, но сделать это правильно — непросто.

Многие разработчики используют индекс массива в качестве ключа. Это ошибка. Она приводит к багам и снижению производительности.

Вот как следует работать с динамическими данными в React.

Как React использует списки

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

Роль ключей

React использует Virtual DOM. Когда данные меняются, React сравнивает новые данные со старыми. Этот процесс называется reconciliation (согласованием).

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

Почему использовать индекс в качестве ключа опасно

Использование индекса (0, 1, 2...) в качестве ключа вызывает три основные проблемы:

  • Ошибки состояния компонентов: если вы отсортируете список, поля ввода или чекбоксы могут отображать данные не того элемента.
  • Падение производительности: React не может отследить, какой элемент есть какой. Он часто перерисовывает весь список вместо одного конкретного элемента.
  • Визуальные баги: ваш интерфейс может выглядеть правильно, но внутренняя логика нарушится при перемещении элементов.

Как правильно использовать ключи

Чтобы ваше приложение оставалось быстрым и стабильным, следуйте этим правилам:

  • Используйте уникальные ID: всегда используйте идентификаторы из вашей базы данных (например, UUID или первичный ключ).
  • Никогда не используйте Math.random(): генерация ключей во время рендеринга заставляет React пересоздавать каждый элемент при каждом обновлении. Это убивает производительность.
  • Сохраняйте стабильность ключей: ключ должен оставаться неизменным для одного и того же фрагмента данных на протяжении всего его жизненного цикла.

Сравнение одним взглядом

Характеристика Использование индекса Использование уникального ID
Стабильность Нестабильно Высокая стабильность
Производительность Низкая Оптимальная
Безопасность состояния Небезопасно На 100% безопасно

Резюме для разработчиков

Используйте метод map(). Передавайте уникальный, стабильный ID в проп key. Избегайте использования индекса массива для любого списка, который может изменяться, сортироваться или фильтроваться.

Источник: https://dev.to/banti_kevat_8e2d123bb7994/react-me-lists-aur-keys-kaise-use-karein-explained-in-hindi-c64