CLJS/Reagent: React не распознает опору в элементе DOM

Я вижу, что в Javascript/React есть много подобных вопросов, но у меня возникла эта проблема с CLojureScript/Reagent, и я не знаю, как ее решить, не испортив все имена состояний моего приложения.

Итак, я получаю эти предупреждения в консоли браузера:

react_devtools_backend.js:2430 Warning: React does not recognize the `showWarning` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `showwarning` instead. If you accidentally passed it from a parent component, remove it from the DOM element.

Кажется, они исходят от имени элемента в состоянии приложения:

(defonce app-state (reagent/atom {:show-warning "none"}))

Единственное решение, которое я нашел, это переименовать элемент с :show-warning на :showwarning, но это приводит к множеству трудно читаемых элементов.

У меня нет никакого реального контроля над тем, как Reagent переименовывает такие ключи, как :show-warning в showWarning, но кажется, что это основа работы React, и у него будет более чистый способ справиться с этим.

Спасибо!


person jwh20    schedule 11.02.2021    source источник
comment
Если React даже знает о ключах состояния вашего приложения, что-то не так. Можете ли вы показать часть вашей программы, которая предоставляет состояние приложения для элемента React DOM?   -  person Biped Phill    schedule 12.02.2021
comment
@BipedPhill Мне не совсем понятно, о чем ты спрашиваешь. У меня нет прямого кода React, так как это CLJS с реагентом. Regent оборачивает все биты React, поэтому он несколько невидим. Но согласен, что-то не так. Ни один из этих атрибутов не должен передаваться в DOM таким образом, но я не уверен, как это делается.   -  person jwh20    schedule 12.02.2021
comment
@ jwh20 Держу пари, что где-то в вашем коде ваше состояние находится в позиции реквизита. Что-то вроде [div @app-state]. Возможно, вы пытались отрендерить его и должны были сделать [div {} @app-state]. Это немного загвоздка, так как если бы у вас было что-то, что оценивается как строка, все было бы хорошо, но реагент карты будет пытаться обрабатывать как реквизит.   -  person Walton Hoops    schedule 12.02.2021
comment
@WaltonHoops Я просмотрю код такой конструкции. Спасибо!   -  person jwh20    schedule 12.02.2021
comment
@WaltonHoops Пожалуйста, опубликуйте это как ответ! Я нашел невинно выглядящий вызов функции, которая выполняла (обмен!) с ключом в атоме состояния приложения, но, конечно же, возвращала новое состояние приложения, которое затем помещалось в элемент [:div]. Проблема решена!   -  person jwh20    schedule 12.02.2021


Ответы (1)


React действительно не должен видеть ваше состояние или заботиться о том, что в нем. Я предполагаю, что вы визуализируете свое состояние где-то в позициях реквизита. Скорее всего где-то в вашем коде у вас есть [:div @app-state]. Возможно, вы пытались визуализировать состояние и должны были сделать [:div {} @app-state].

Возможно, это небольшая проблема с Reagent, так как [:p @im-a-string] будет отображать строку, а [:p @im-a-map] будет рассматривать карту как реквизит.

person Walton Hoops    schedule 12.02.2021