我有一个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>
)}/>
);
2条答案
按热度按时间8fsztsew1#
显示错误是因为单击“取消”按钮模糊了字段,导致
meta.touched
变为true。这不是“调用验证”,错误已计算。对我来说,
onCancel
没有被调用是没有意义的。当我运行这段代码时,它似乎确实被调用了。如果你想用Cancel来重置表单,你需要调用
form.reset()
,就像this example一样。如果您不想显示错误并 * 不 * 重置表单,则需要自己管理该状态。
x8diyxa72#
我只是花了几个小时试图调试一个类似的问题。结果我只需要更新我的样式: