Используйте ReferenceField внутри ArrayInput / SimpleFormIterator - PullRequest
0 голосов
/ 07 мая 2020

Как сказано в названии. Мне нужно использовать ReferenceField внутри ArrayInput / SimpleFormIterator. Я все время получаю следующую ошибку:

TypeError: Cannot read property 'replace' of undefined

Версии:

react-admin: 3.2.3
react: 16.12.0

Вот фрагмент кода:

<ArrayInput source="specialties" label="">
  <SimpleFormIterator disableAdd>
    <ReferenceField label="Specialties Link" source="ID" reference="specialty" link="show" >
      <TextField source="ID" />
    </ReferenceField>
    <TextInput source="vendorSpecialtyText" label="Vendor Specialty Text" />
  </SimpleFormIterator>
</ArrayInput>

Существует ресурс под названием specialty и это работает внутри ArrayField в других частях приложения, например:

<ArrayField source="specialties" label=" Specialties">
  <SingleFieldList>
    <ReferenceField label="Specialties Link" source="ID" reference="specialty" link="show" >
      <TextField source="ID" />
    </ReferenceField>
  </SingleFieldList>
</ArrayField>

Не уверен, что это просто невозможно в этой структуре, или я неправильно это использую. Если есть способ исправить это или другое желание go по этому поводу, пожалуйста, дайте мне знать! Спасибо.

1 Ответ

1 голос
/ 25 мая 2020

Из документации :

Примечание: SimpleFormIterator принимает только компоненты Input как дочерние. Если вы хотите использовать вместо этого Fields, вы должны использовать <FormDataConsumer>, чтобы получить правильный источник, ... "

import { ArrayInput, SimpleFormIterator, DateInput, TextInput, FormDataConsumer } from 'react-admin';

<ArrayInput source="backlinks">
    <SimpleFormIterator disableRemove >
        <DateInput source="date" />
        <FormDataConsumer>
            {({ getSource, scopedFormData }) => {
                return (
                    <TextField
                        source={getSource('url')}
                        record={scopedFormData}
                    />
                );
            }}
        </FormDataConsumer>
    </SimpleFormIterator>
</ArrayInput>

или включить поля ввода

<ArrayInput source="specialties" label="">
  <SimpleFormIterator disableAdd>
    <ReferenceInput label="Specialties Link" source="ID" reference="specialty">
      <SelectInput optionText="{Your description field}"  />
    </ReferenceInput>
    <TextInput source="vendorSpecialtyText" label="Vendor Specialty Text" />
  </SimpleFormIterator>
</ArrayInput>
...