【问题标题】:redux-form v6 show validation error for select fieldredux-form v6 显示选择字段的验证错误
【发布时间】:2017-01-22 11:16:12
【问题描述】:

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

我们可以像这样创建自定义渲染字段

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"/>

现在我需要知道,我们如何为选择字段做同样的事情,以及我们应该如何将下拉选项传递给这个自定义渲染字段,任何想法为选择创建自定义渲染字段?

【问题讨论】:

标签: reactjs redux redux-form


【解决方案1】:

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

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 是否包含选项标签,如果是,则呈现&lt;select&gt; 而不是input

【讨论】:

  • 太棒了,感谢您让我知道children 属性的用法。
  • 如何禁用基于本地状态的选择?
  • 您可以将任意道具传递给该字段,因此只需传递一个用于禁用状态&lt;Field disabled={this.state.isDisabled}&gt;。 “真正的”&lt;select&gt; 标签现在可以使用它了。
猜你喜欢
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
相关资源
最近更新 更多