如何将Form.Item中提取的getFieldValue传递给自定义passwordConfirmValidation函数
实现方案
方法1:直接传递getFieldValue作为参数
这种方式不需要修改原有passwordConfirmValidation的外层结构,只需要在validator调用时将getFieldValue作为参数传入即可:
<Form.Item rules={[ ({getFieldValue}) => ({ validator: (_, value) => passwordConfirmValidation(_, value, getFieldValue) }) ]}>
对应的自定义校验函数接收参数即可使用:
const passwordConfirmValidation = async (_, value, getFieldValue) => { // 内部直接调用传入的getFieldValue const originPassword = getFieldValue('password'); if(value !== originPassword) { return Promise.reject(new Error('两次输入密码不一致')); } return Promise.resolve(); }
方法2:高阶函数封装校验器
如果想要规则部分的代码更简洁,可以把自定义校验函数封装为高阶函数,预先接收getFieldValue参数后返回实际的校验逻辑:
// 封装高阶校验函数 const passwordConfirmValidation = (getFieldValue) => async (_, value) => { const originPassword = getFieldValue('password'); if(value !== originPassword) { return Promise.reject(new Error('两次输入密码不一致')); } return Promise.resolve(); } // Form.Item部分直接调用传参即可 <Form.Item rules={[ ({getFieldValue}) => ({ validator: passwordConfirmValidation(getFieldValue) }) ]}>
内容的提问来源于stack exchange,提问作者mleister
相关产品推荐
相关产品推荐

