TGViewer
Deep Digital Deep Digital @deepdigital · 1.06K subscribers
Post #305 595
Привет, друзья!

Сегодня мы коснемся важной темы: как правильно использовать key при рендеринге списков в React.

🔑 Key — это специальный атрибут для эффективного сопоставления элементов при изменении списка (и не только, но сейчас не об этом). Он критически важен для оптимальной производительности.

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

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

❓ Как же решить эту проблему и обезопасить себя?

Используйте уникальные ID в качестве ключей. Если данные приходят с бэкенда, они, вероятно, уже имеют ID. На клиентской стороне вы можете указать сами уникальные идентификаторы или использовать библиотеку Nanoid для генерации, но делать это нужно не в момент рендера, а при определении массива. Кстати, по этой же причине и не рекомендуется применять метод Date.now().

Может показаться, что использовать Date.now() в качестве уникального ID — это быстрый и простой способ. Но здесь скрыта уязвимость: если вы попытаетесь создать два элемента одновременно, получите два одинаковых ID. Поэтому вместо поиска быстрых решений лучше довериться проверенным инструментам и способам.

😕 Вы могли заметить, что мы не упомянули хук useId. Дело в том, что такие идентификаторы будут уникальны только в рамках компонента, а нам нужны ID, которые уникальны глобально в рамках всего приложения.

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

@chulakov_dev
  • 🔥 17
  • ❤ 3
  • 👍 1
More from @deepdigital
  1. May 19, 2026Как расти в непростом рынке, масштабировать группу компаний и не терять фокус на клиентах?…
  2. Dec 26, 2025⚡️Подвели итоги 2025 года Chulakov Group Записали подкаст с Олегом Чулаковым — основателем…
  3. Dec 8, 2025Победы на Tagline Awards 2025 🏆 Снова громко напомнили, зачем делаем дизайн — чтобы созда…
  4. Jun 9, 2025Chulakov ⨉ ИТМО 💥 Мы снова в одном из крупнейших IT-вузов России. Альберт Рыбалко, руково…
  5. Jun 6, 2025🏆 Chulakov — № 1 в дизайне по всем рейтингам Безоговорочный лидер по версии крупнейших ан…
  6. May 6, 2025🙌 Вспоминаем, как насыщенно провели время на IT-конференции Merge Были рады стать партнер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →