javascript - redux-form,如果使用返回函数,验证会中断

标签 javascript ecmascript-6 redux-form

我正在使用 redux 表单并想要自定义验证消息。

我在这里使用了他们的示例验证项目: https://codesandbox.io/s/PNQYw1kVy

按原样,它按预期工作。如果我从

更改必填字段的验证函数

const required = value => value ?未定义:“必需”

const required = message => value => value ?未定义:消息|| '必需'

并更改名称和电子邮件的验证定义

validate={[ required ]}

validate={[ required('Message') ]}validate={[ required(null) ]}

然后它不处理验证。

为什么会这样?据我了解,如果我们有 const myFunc = val => valconst myFunc2 = () => val => val 那么 [myFunc, myFunc2()] 将产生一个由 2 个功能相同的函数组成的数组。

最佳答案

不要使用包装在另一个函数中的验证函数,每次渲染表单时都会构造一个新函数,这将导致字段重新渲染(因为 this.props.validate !== nextProps.validate)。(检查这个 issue on github )

您可以使用具体定义的参数化验证规则实例:

const required = value => value ? undefined : 'Required';
const requiredMessage = required('Message');

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

此外,这也是为什么在表单组件中定义的验证函数不起作用的原因。

const FormComponent = (props) => {
    const {handleSubmit, submitting} = props;
    const required = value => value ? undefined : 'Required'; //this will not work!!!

    return <form onSubmit={handleSubmit}>
        <Field
            name='username'
            type='text'
            component={renderField}
            label='Username'
            validate={required}
        />
        <div>
            <button type="submit" disabled={submitting}>Submit</button>
        </div>
    </form>;
};

关于javascript - redux-form,如果使用返回函数,验证会中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49293061/

相关文章:

JavaScript 函数执行

javascript - JS 类抽象

javascript - 如何在 redux-forms v7 中从我的应用程序中的任何位置获取任何表单值

reactjs - 将 Redux 表单与 React Router 结合使用

javascript - 将 'custom' 组件改编为 redux-forms?

javascript - 预期声明 Angular 中的 SummaryPipe

javascript - 使用 AngularJs 显示/隐藏元素

javascript - 使用 Vue JS 复制输入字段,增加索引

javascript - 我如何编写一个从后面开始阅读的正则表达式?

javascript - object.assign 正在用重复信息覆盖数组中的所有对象