redux-form v6显示选择字段的验证错误

时间:2016-09-14 15:11:13

标签: reactjs redux redux-form

在redux-form的v6中,我们可以显示正常输入字段的错误,如下面的

我们可以像这样创建自定义renderField

const renderField = ({ input, label, type, meta: { touched, error } }) => (
  <div>
    <label>{label}</label>
    <div>
      <input {...input} placeholder={label} type={type}/>
      {touched && error && <span>{error}</span>}
    </div>
  </div>
)

在表单中,我们可以使用该自定义renderField

 <Field name="username" type="text" component={renderField} label="Username"/>

现在我需要知道,我们如何为select字段执行此操作,以及如何将dropdown选项传递给此自定义renderFields,是否有想为select创建自定义renderField?

1 个答案:

答案 0 :(得分:15)

如果你不介意一些代码重复,你可以这样做:

const renderSelectField = ({ input, label, type, meta: { touched, error }, children }) => (
  <div>
    <label>{label}</label>
    <div>
      <select {...input}>
        {children}
      </select>
      {touched && error && <span>{error}</span>}
    </div>
  </div>
)

以表格形式消费:

<Field name="username" component={renderSelectField} label="Username">
  { mySelectOptions.map(option => <option value={option.value}>{option.text}</option>) }
</Field>

您可以看到,将选项传递给选择是通过props.children完成的,与将Field组件与component="select"一起使用时完全相同。

如果您不想复制,可以尝试使原始renderField变得更聪明。例如,您可以看到children是否包含选项标记,如果是,则渲染<select>而不是input