【发布时间】:2020-01-12 20:58:43
【问题描述】:
我有一个验证其表单字段的 React-Final-Form。
我想不在单击取消或重置按钮时调用验证。但是,如果单击取消按钮单击导致无效字段呈现其错误消息,则永远不会调用 onCancel 函数。即使我将按钮类型设置为“重置”,也会发生这种情况。
如果 validate 没有返回更改,只有这样才能到达 onCancel 函数。
handleSubmit(values) { console.log(JSON.stringify(values, 0, 2)) }
onCancel() { console.log("cancelled!"); }
render() {
const onSubmit = async values => { this.handleSubmit(values); };
return (
<Form name="form"
onSubmit={onSubmit}
validate={values => {
const errors = {};
if (!values.username) { errors.username = 'Required' }
return errors }}
render={({handleSubmit}) => (
<form onSubmit={handleSubmit}>
<Field name="username">
{({ input, meta }) => (
<input {...input} type="text" placeholder="Username" autoFocus>
{meta.error && meta.touched && <span>{meta.error}/span>}
)}
</Field>
<button type="submit">Submit</button>
<button type="button" onClick={onCancel}>Cancel</button>
</form>
)}/>
);
【问题讨论】:
-
底线,要回答这个问题,请指定如何通过 react-final-form 或 final-form 框架之外的其他方式暂停表单验证。
-
这张海报的问题并非如此,但对于那些通过谷歌搜索到达的人:不要忘记没有
type属性的button自动具有submit类型, 因此将touch所有字段并显示任何错误,无论其onClick函数说什么。为防止这种情况,请添加type=button。 -
,然后在你的验证函数中= > if(values.btnClicked !== "CANCEL") {...做某事}。这也将允许您绕过验证