Я хочу получить доступ к индексу simpleFormIterator. Как я могу это сделать? У меня есть код вроде этого Я пытаюсь получить к нему доступ в компоненте SelectInput
<ArrayInput source='services'>
<SimpleFormIterator>
<TextInput source='id' label = "Service Name" validate = {this.RequiredAndRegex} />
<FormDataConsumer>
{({ formData, ...rest }) =>
<ArrayInput source='parametervalues'>
<SimpleFormIterator>
<TextInput source='id' label = "Parameter Values" validate = {this.RequiredAndRegex} />
<SelectInput label = "Paramater Type"
source = "id"
choices = {this.getParameters(formData.services[index].servicetype)}
optionText = {optionRenderer}
optionValue = "id" />
</SimpleFormIterator>
</ArrayInput>
}
</FormDataConsumer>
</SimpleFormIterator>
</ArrayInput>




Это невозможно с SimpleFormIterator. Вам придется написать свой собственный. Я предлагаю использовать его как основу (https://github.com/marmelab/react-admin/blob/master/packages/ra-ui-materialui/src/form/SimpleFormIterator.js) и передавать индекс при клонировании ввода на L114
SimpleFormIterator фактически передает индекс в строке 137 (https://github.com/marmelab/react-admin/blob/master/packages/ra-ui-materialui/src/form/SimpleFormIterator.js) .
Однако вы не сможете получить к нему доступ без ребенка, как вы пытаетесь в своем примере.
Если вы хотите получить к нему доступ, вам нужно будет создать собственный дочерний элемент (SelectInput в вашем случае).
Обычно я пишу полную настраиваемую форму, используя redux-form и material-ui, а затем отправляю значения в dataProvider.
Вы можете создать декоратор и извлечь туда индекс вашего ввода.
// Make Decorator
const withDynamicChoices = BaseComponent => {
return class extends Component {
getChoices = () => {
// console.info(this.props);
// grab your index here...
const formData = this.props.formData;
return formData.services[this.props.index].servicetype;
}
render() {
return <BaseComponent
{...this.props}
choices = { this.getChoices() }
/>;
}
}
}
// Decorate original Input
const SelectInputW = withDynamicChoices(SelectInput);
// Use original input as <SelectInputW formData = {formData} >
Вы успешно создали компонент с помощью SimpleFormIterator? Если да, не могли бы вы привести пример? Я не могу заставить его работать.