Ссылочный ввод с вложенным checkboxGroupInput ведет себя странно

#reactjs #graphql #react-admin

#reactjs #graphql #реагировать-администратор

Вопрос:

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

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

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

Пока все хорошо..

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

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

Комментарии:

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

Ответ №1:

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

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

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

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

PS .. я наблюдал какое-то странное поведение в моем checkboxGroupInput, когда я что-то нажимал, это дублировало любое поле, на которое был нажат… Причиной этого была ошибка в типе объекта в моей схеме… Там был Int, смешанный с ID, и, к счастью, это обнаружилось в Redux Dev Tools и привело меня к проблеме.

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

Комментарии:

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

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