向 Redux Form Fields 动态添加验证规则的更优雅的方法是什么?
What is a more elegant way to dynamically add validation rules to Redux Form Fields?
我正在遍历对象数组以形成 Redux 表单字段,并非所有字段都需要用户输入。字段级验证规则需要一个函数,但我无法找出一个 returns 验证规则或 null 的动态函数。
我目前这样做:
{areaQuestions.map(
question =>
question.required ? (
<Field
component={SelectField}
key={question.area}
label={question.questionText}
name={question.area}
placeholder={question.questionText}
options={question.questionAnswers}
validate={required}
/>
) : (
<Field
component={SelectField}
key={question.area}
label={question.questionText}
name={question.area}
placeholder={question.questionText}
options={question.questionAnswers}
/>
),
)}
然而,这种只放弃验证道具的方法似乎不够优雅而且不干。还有其他建议吗?
您可以在示例中使用逻辑与:
{areaQuestions.map(
question => <Field
component={SelectField}
key={question.area}
label={question.questionText}
name={question.area}
placeholder={question.questionText}
options={question.questionAnswers}
validate={question.required && required}
/>
)}
如果它变得更复杂,您还可以构建一个数组:
const validate = [];
if(question.required) {
validate.push(required);
}
return <Field ... validate={validate} />;
我正在遍历对象数组以形成 Redux 表单字段,并非所有字段都需要用户输入。字段级验证规则需要一个函数,但我无法找出一个 returns 验证规则或 null 的动态函数。
我目前这样做:
{areaQuestions.map(
question =>
question.required ? (
<Field
component={SelectField}
key={question.area}
label={question.questionText}
name={question.area}
placeholder={question.questionText}
options={question.questionAnswers}
validate={required}
/>
) : (
<Field
component={SelectField}
key={question.area}
label={question.questionText}
name={question.area}
placeholder={question.questionText}
options={question.questionAnswers}
/>
),
)}
然而,这种只放弃验证道具的方法似乎不够优雅而且不干。还有其他建议吗?
您可以在示例中使用逻辑与:
{areaQuestions.map(
question => <Field
component={SelectField}
key={question.area}
label={question.questionText}
name={question.area}
placeholder={question.questionText}
options={question.questionAnswers}
validate={question.required && required}
/>
)}
如果它变得更复杂,您还可以构建一个数组:
const validate = [];
if(question.required) {
validate.push(required);
}
return <Field ... validate={validate} />;