Форма Redux: отображение пользовательского компонента в зависимости от значения поля

У меня есть FieldArray:

<FieldArray name="elements" component={renderFiles}/>

Данные:

[
  {name:'xxx', url:'www.xxx.com', isRepeat: true},
  {name:'yyy', url:'', isRepeat: false},
  {name:'zzz', url:'', isRepeat: false}
]

Мне нужно отобразить SwitchField в зависимости от URL имеет значение

const renderFiles = ({ fields }) => {
   return (
      <div>
        {fields.map((element, index) =>
          <div key={'preview-wrap-'+index}>
            <Field
              name={`${element}.name`}
              type="text"
              component={TextField}/>
            { element.url ? 
              <Field 
              name={`${element}.isRepeat`} 
              component={SwitchField} 
              change={() => { console.log('change')}}/> :
              '' 
            }
        </div>
      )}
    </div>
  )
}

TextField и SwitchField являются пользовательскими компонентами реагирующего инструментария:

const TextField = ({ input, label, theme, meta: { touched, error }, ...custom }) => (
  <Input type='text' label={label} error={touched ? error : ''} {...input} {...custom} theme={{error:'text-error', ...theme}} />
)

const SwitchField = ({ input, label }) => (
  <Switch checked={!!input.value} label={label} onChange={(value) => {console.log('change')}} {...input} />
)

1 ответ

Возможно, я не совсем понял вашу проблему, поскольку она довольно проста, но вместо:

{ element.url ? <Field component={SwitchField} .../> : "" }

Вы можете просто сделать:

{ 
element.url 
  ? <Field component={SwitchField} .../>
  : <Field component={TextField} .../>
}
Другие вопросы по тегам