Я скопировал двухлетний сундук с here. В настоящее время он работает с Figwheel и использует более новую версию Reagent/React. Я ищу общий способ изолировать это предупреждающее сообщение, которое приходит на консоль Javascript: Warning: Every element in a seq should have a unique :key
. Идея состоит в том, чтобы поместить :key
с генерируемым уникальным значением во все компоненты. Затем сообщения должны исчезнуть, и я буду в состоянии увидеть, какие компоненты нуждаются в уникальном :key
. Моя проблема заключается в том, что даже несмотря на то, что во всех них вводится уникальный :key
, предупреждающее сообщение все еще видно.Reagent React Clojurescript Предупреждение: каждый элемент в seq должен иметь уникальный ключ:
Итак - мог бы кто-нибудь сказать мне, какой компонент я пропустил, или иначе, что я сделал неправильно? Как вы можете видеть из source (permalink), я добавил :key (gen-key)
к двум компонентам: [:polyline {:key (gen-key) ...
и [:svg {:key (gen-key) ...
в строках 43 и 68 соответственно.
Редактировать Так что это answer (permalink), с точки зрения кода в любом случае. Просто найдите размещение ^{:key (gen-key)}
по строкам 44 и 60.
Обратите внимание, что функция gen-key
была сделана для отладки. Естественные ключи для замены.
Это, как вы могли бы реализовать gen-key
:
(defn gen-key []
(gensym "key-"))
И вот так сделано в ссылках выше:
(def uniqkey (atom 0))
(defn gen-key []
(let [res (swap! uniqkey inc)]
(u/log res)
res))
Код использует 'map', а не' for' и 'in', но с тем же эффектом. Я играл с помощью: key либо как метаданных, либо как первый аргумент для компонента. Но согласно документации * в зависимости от того, что * не имеет никаких шансов. Есть много xy точек, помещенных в '[: полилиния' - у которых нет ключа: возможно, это проблема - я все еще пытаюсь это выработать ... –
Это определенно должно быть как метаданные, а не первый элемент компонент и поэтому должен иметь вид '^ {: key val} [compnent]'. Обратите внимание также, что реагент не имеет отношения к lazy-seq, поэтому вы часто видите такие вещи, как '(in [] ...)' или '(doall ...)', используемые для обеспечения реализации seq. Убедитесь, что использование последнего реагента в качестве сообщений об ошибках стало немного лучше. Похоже, помню, как я видел ответ, связанный с ошибкой в прошлый раз, когда у меня было это, поэтому, возможно, вы можете использовать инспектора браузера, чтобы посмотреть на элементы страницы, чтобы понять, какой компонент отвечает. –
. Существует некоторая отличная документация по реагенту на день8/которые могут помочь. В частности, https://github.com/Day8/re-frame/wiki/Using-%5B%5D-instead-of-%28%29 может помочь понять, где реагент будет создавать реагирующие компоненты, что не всегда очевидно и может помочь отследить, где вам нужны метаданные –