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

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

47 ответов

5 просмотров

Либо уникальный 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 из индекса

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

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

А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
32
Hello. Could you please help me with finding all coordinates within a radius using a spatial index, given that I have a table with coordinates? SET @lng = 37.57925; SET @lat ...
Rinchin G
7
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Не получается у меня либу Zstd статически слинковать, вылазят какие-то AV Вроде example у них не сложный есть, вроде всё делаю как там... но не выходит чего-то Вопрос - если ...
notme
4
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Всех приветствую. Направьте меня в нужное русло. Постепенно переписываю проект с delphi на lazarus. Приложение - обычный windows/linux клиент для бд firebird. Тут все хорошо. ...
Mishutka
8
Привет всем, подскажите, есть сайт на ево 1.4, надо сделать его мультиязычным, структура документов одинаковой останется, чисто тексты разные, свои тв для каждого языка, поддо...
Oleg
7
@rouse_79 https://github.com/AlexanderBagel/FWZip/blob/8c6882a31ffaa9a23e66e22eaa5b1f7ebfcad43c/zlib_external.pas#L393 Почему Си-шная функция memset, параметр отвечающий за з...
notme
8
{"fieldValue":[ {"title":"Alkmaar","coords":"52.62689992095562, 4.771862510168792","address":"Edisonweg 1","zip":"1821 BN","city":"Alkmaar","description":"ma-vr: 07:00-17:00"...
Marc Hoogstrate
6
Карта сайта