Ответ
Для генерации уникальных ключей в React чаще всего использую:
uuid- популярная библиотека для генерации UUID (Universally Unique Identifier)
import { v4 as uuidv4 } from 'uuid';
const id = uuidv4(); // '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
nanoid- более легкая альтернатива UUID (128 байт против 36 байт)
import { nanoid } from 'nanoid';
const id = nanoid(); // 'V1StGXR8_Z5jdHi6B-myT'
- Для простых случаев можно использовать
crypto.randomUUID()(встроенный API браузера)
const id = crypto.randomUUID();
Важно: ключи должны быть стабильными между рендерами, но уникальными среди соседей. Для списков лучше использовать ID из данных, а генераторы - только когда ID нет в данных.
Ответ 18+ 🔞
Слушай, а вот эти твои ключи в Реакте — это вообще отдельная песня, пиздец. Все эти key={index} — это просто билет в один конец в ад багов, когда список пересортируется. Ну ёпта, народ, думайте головами!
Так вот, есть несколько способов не выстрелить себе в ногу, точнее, в репутацию кода.
-
uuid— классика, как водка под селёдку. Все его знают, все его юзают. Генерит строку, от которой у любого нормального человека глаза на лоб полезут. Уникальность — овердохуища, это факт.import { v4 as uuidv4 } from 'uuid'; const id = uuidv4(); // '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'Солидный такой, блядь, идентификатор. Но и весит, сука, прилично — целых 36 байт. Для списка из тысячи элементов — уже не шутка.
-
nanoid— это какuuid, но на диете. Умный чувак, который понял, что нехуй столько букв таскать. Генерит строки короче, криптографически стойкие, и в рот меня чих-пых, всего 21 байт в стандартной версии!import { nanoid } from 'nanoid'; const id = nanoid(); // 'V1StGXR8_Z5jdHi6B-myT'Красота, а не библиотека. Почти все умные люди сейчас на него переходят, если своих айдишников с бэка нет.
-
crypto.randomUUID()— встроенный в браузер кореш. Зачем тащить либу, если браузер уже всё умеет? Современный API, тот же UUID v4. Быстро, надёжно, из коробки.const id = crypto.randomUUID(); // 'f4a8c3e0-1b3a-4e5c-9d2a-7b6c5f4e3d2a'Но, блядь, смотри — не в Node.js его сразу (в старых версиях), и поддержку в древних браузерах проверь, а то будет "а где мой ключ, сука?".
Главное правило, ёпта, которое все просрали:
Ключи должны быть как жена — стабильными между рендерами, но при этом уникальными среди соседей-соперников.
Если с бэка приходит массив с item.id — вот твой ключ, божественный и данный свыше, хули тут генерить-то?
Эти генераторы — это как костыль, когда своей ноги (нормального айди) нет. Только для таких случаев. Всё, тема закрыта, пошёл пить чай.