在最后一天,我也遇到了这个问题,并努力寻找任何合适的解决方案,但是通过在 redux-form repo 上合并了许多不同的问题以及大量重新阅读文档并查看我的源代码得到了一些应该解决你的问题的东西。当然,差不多一年后,但希望它可以帮助某人。
注意: “魔法”是由注释表示的,因此如果您的 reduxForm 配置对象看起来不同,我不会太在意。
import { reduxForm, getFormValues, isDirty } from 'redux-form';
const formName = 'brilliantForm';
let MyForm = reduxForm({
form: formName,
enableReinitialize: true,
asyncValidate,
asyncBlurFields: [],
})(ComponentToWrap);
MyForm = connect(
state => ({
formValues: getFormValues(formName)(state),
initialValues: {
fieldOne: '',
fieldTwo: '',
},
shouldValidate: () => isDirty(formName)(state), // This is the magic
})
)(MyForm);
export default MyForm;
这里的要点是,如果您的表单有初始值,redux-form 将默认验证它们,除非您告诉它不要通过shouldValidate()。该isDirty选择使得限制验证,快速的工作之后,形式已经触碰/与之交互。
注意:从7.1 开始, shouldValidate()
已被拆分并弃用,以支持shouldError()和shouldWarn()。