ReferenceInput с вложенным CheckBoxGroupInput ведет себя странно

Я искал много часов и пробовал разные вещи, но многие примеры, которые я вижу для CheckBoxGroupInput, просто имеют жестко закодированный список связанных вариантов, который немного бесполезен... Мой сценарий здесь таков, что у меня есть список тегов, которые я хочу чтобы иметь возможность ассоциироваться с продуктом, довольно обычными вещами..

мне нужно, чтобы этот список был извлечен из базы данных postgres... и эта часть, кажется, работает, и мой список выглядит нормально при первом отображении на экранах создания для реакции-администратора... Элемент управления выглядит следующим образом:

<ReferenceInput reference = "ProductRealBenefit" source = "realbenefits" sort = {{ field: 'name', order: 'ASC' }}>
     <CheckboxGroupInput source = "name" />                                                      
</ReferenceInput>

Это все хорошо и хорошо до сих пор..

он отображает мой список, как и ожидалось.. моя схема настроена в соответствии с форматом для ra_data_graphql_simple... Неожиданно то, что как только я нажимаю на один из тегов, он немедленно отправляет запрос в сервер для запроса allProductRealBenefit со значением фильтра, равным идентификатору щелчка, и он добавляет дубликат этого тега щелчка в список, что нарушает элемент управления с ошибкой дублирующего ключа... я не понимаю, почему он будет отправлять запрос после того, как я щелкну в любом случае, я не пытаюсь ничего сохранить, просто собираю, какие теги будут отправлены с данными формы для создания записей ссылок, и у меня уже есть все эти данные после первоначального заполнения элемента управления.

Я предполагаю, что это не должно быть вложено в ReferenceInput, но я не вижу другого способа заполнить мои варианты результатами запроса к базе данных. Я знаю, что это смехотворно распространенная функция, и мне нужно найти способ использовать ее в нескольких местах, потому что эта функция тегов должна быть доступна в нескольких ресурсах. Я также пробовал это с AutocompleteArrayInput, и у него были похожие проблемы, поэтому я знаю проблема в том, что я должен пропустить важный шаг.... Будет здорово, если кто-то сможет указать правильное направление. Я возвращаюсь к документам, чтобы посмотреть, что я могу выкопать!

У меня сейчас такая же проблема с флажками. Ваше решение не сработало для меня (я борюсь с поставщиком REST), поэтому пожелайте мне удачи в определении того, что происходит, когда я нажимаю на него. Спасибо за публикацию этого вопроса и ответа.

Nikolai Prokoschenko 27.10.2020 19:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
4
1
588
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, я отвечу еще на один из моих вопросов на случай, если кто-нибудь приземлится здесь так же вверх ногами, как и я, когда задал его... Я просто не понимал, что делает какая-то закулисная магия, поэтому я использовал это неправильно... И я нахожу документы запутанными

В моем примере выше... мой ProductRealBenefits в ссылке был отношением один ко многим, представленным в моей схеме с реальными преимуществами: [ProductRealBenefits]... Поэтому мне понадобились следующие компоненты.

<ReferenceArrayInput label = "Real Benefit Tags" source = "realbenefitsIds" reference = "ProductRealBenefit">
    <CheckboxGroupInput  optionValue = "id" optionText = "name" allowEmpty />
</ReferenceArrayInput>

В ra_data_graphql_simple dataProvider есть небольшая магия, которая создает для вас элемент в состоянии с именем realbenefitsIds, который вы используете в качестве источника для ReferenceArrayInput, я пытался использовать фактический объект массива реальных преимуществ, и это не сработало. Я не смог найти хороших примеров или каких-либо приличных объяснений того, как заставить это работать... Так что в конечном итоге именно Redux Dev Tools спасли меня здесь. Мне пришлось пройти через некоторые обручи в графовом сервере, чтобы заставить все это работать с поставщиком данных, отправляющим обратно diff вещи для значений фильтра GET_MANY и GET_REFERENCE_MANY, но это был просто вопрос разбора аргументов фильтра, чтобы они соответствовали тому, что ожидалось. В конце концов я напишу dataProvider, но пока это подходит.

PS .. я наблюдал какое-то странное поведение в моем CheckboxGroupInput, когда я щелкал что-то, оно дублировало любое поле, которое было нажато... Причиной этого была ошибка в типе объекта в моей схеме... Был Интерн., смешанный с Я БЫ , и, к счастью, это появилось в Redux Dev Tools и привело меня к проблеме.

Наконец.. Я собираю пример проекта в Github, который будет использовать React-Admin, GraphQL, RA_DATA_GRAPHQL_SIMPLE, Sequelize и базу данных Postgres, и я буду много комментировать, чтобы избавить его от путаницы для всех, как я. .. Ваше здоровье!!

А теперь плюс и комментарий: работает делает. Я забыл заменить ReferenceInput на ReferenceArrayInput. Я до сих пор не понимаю внутреннюю работу ${RESOURCE}Ids, но, тем не менее, я на шаг впереди. Спасибо!

Nikolai Prokoschenko 28.10.2020 10:11

О, хорошо, я только что увидел это и как раз собирался вернуться и посмотреть на это для вас... рад, что у вас все получилось!! Ваше здоровье

Greg Belyea 28.10.2020 13:13

Другие вопросы по теме