在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?
答案 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
。