169 похожих чатов

Привет! Как вы решаете проблему генерации уникального ключа для компонентов?

47 ответов

12 просмотров

Либо уникальный Id в объекте, либо либа например uuid

А в чем проблема?

В крайнем случае index из map например, но не рекомендуется

Марат
В крайнем случае index из map например, но не реко...

к index можно миксовать какой-то стринговый параметр объекта, будет уникально

Danik-Newgarden Автор вопроса
Марат
Либо уникальный Id в объекте, либо либа например u...

Если я генерирую ключ через uid в двух разных компонентах, то ключи повторяются

Ivan 🧑‍🚀
Нет)

да, потому что реакт и сам индексы проставляет (велком в исходники) Ну только если заткнуть его ор

Danila Nikonets
?

Не гуд)

Danila Nikonets
поясни

При добавлении строки к индексу получается настолько же уникальное значение, насколько уникален индекс

Ivan 🧑‍🚀
Покеж

сча попробую найти

Ivan 🧑‍🚀
Покеж

вот https://ru.reactjs.org/docs/lists-and-keys.html

Ivan 🧑‍🚀
При добавлении строки к индексу получается настоль...

Да, но при изменении коллеции если не миксовать что-то к индексу, то получаем неожидаемое поведение типа удаление из DOM совсем не того элемента который нужно было удалить

Danila Nikonets
Да, но при изменении коллеции если не миксовать чт...

Есть у тебя список, в нем ключи item-0, item-1 и item-2. Ключи генерятся из строки item- и индекса. Если удалить элемент посередине, то ключи будут вычислены в item-0 и item-1. Добавление строки ни на что не влияет

Ivan 🧑‍🚀
Есть у тебя список, в нем ключи item-0, item-1 и i...

С чего бы это? Допустим удалили второй элемент коллекции 0 1 2 -> 0 1 (пропал третий) /////// 0-привет 1-hi 2-bye -> 0-привет 1-bye (а тут второй)

Danila Nikonets
С чего бы это? Допустим удалили второй элемент кол...

Зачем тогда индекс, если у тебя есть УНИКАЛЬНОЕ значение?

Ivan 🧑‍🚀
Зачем тогда индекс, если у тебя есть УНИКАЛЬНОЕ зн...

иногда бывает так, что добавляемая к индексу строка не совсем уникальная (например, в чате может быть два и более сообщения "привет")

Danila Nikonets
С чего бы это? Допустим удалили второй элемент кол...

Приведёт к лишним ререндерам — компонент с -bye не изменился, а ключ у него изменился

Danila Nikonets
иногда бывает так, что добавляемая к индексу строк...

ну вот уже должно же казаться костылем не очень правильным да? или нет?

Danila Nikonets
иногда бывает так, что добавляемая к индексу строк...

Ключи должны быть уникальными и ПОСТОЯННЫМИ для конкретного компонента

Так а в чем проблема?

Danila Nikonets
да, но иногда можно ж закостылить чуть-чуть)

Если можно сделать нормально, то зачем?

Danik-Newgarden Автор вопроса
Ivan 🧑‍🚀
Так а в чем проблема?

Так вот как они повторяются: у меня есть массивы типа [1, 2] и map((item) => (<element key={uid(item)}/>) Есть элементы 1 2 Когда элемент добавляется в масив пушится arr.length + 1 Соответственно элементы будут иметь ключ 'val-1' 'val-2' Если удалить элемент 1, и создать новый то у меня будет два элемента с ключом 'val-2'

Ivan 🧑‍🚀
Покеж

Так стоп диза. https://github.com/facebook/react/blob/master/packages/react/src/ReactElement.js#L388 Или я упоролся или мне приснилось но чет я не нахожу

Danila Nikonets
Да, но при изменении коллеции если не миксовать чт...

просто никогда не использовать индексы как ключи или составляющую индекса, НИКОГДА и все будет хорошо

Danik Newgarden
Так вот как они повторяются: у меня есть массивы т...

https://t.me/react_js/1077335 Уникальные идентификаторы надо раздать ДО рендера. Там, где объявляются/запрашиваются/хранятся данные. При добавлении нового элемента, не надо завязываться на длину массива — создай УНИКАЛЬНОЕ значение. Math.random или nanoid. Не в рендере, не внутри map

Dmitriy Shuleshov
о точно де нашел?

https://github.com/facebook/react/blob/master/packages/react/src/ReactChildren.js#L58-L71 тут

Nikolay Tolochnyy
https://github.com/facebook/react/blob/master/pack...

А неее подождь это же мап для чилдренов, наврное я и в прошлый раз принял его за авто key из индекса

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
14
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
Карта сайта