Я не совсем уверен, но я думаю, вам придется написать собственную функцию сброса без кнопки типа reset
. Как то так:
const handleReset = (resetForm) => {
if (window.confirm('Reset?')) {
resetForm();
}
};
function Example() {
return (
<Formik initialValues={{ value: 1 }}>
{formProps => {
return (
<Form>
<Field name="value" type="number" />
<button
onClick={handleReset.bind(null, formProps.resetForm)}
type="button"
>
Reset
</button>
</Form>
);
}}
</Formik>
);
}
Если вы действительно хотите использовать onReset
, я думаю, что единственный способ - выдать ошибку. Исходный код Formik , кажется, указывает, что resetForm()
будет вызываться независимо от того, что возвращает ваша функция onReset()
.
const handleReset = () => {
if (!window.confirm('Reset?')) {
throw new Error('Cancel reset');
}
};
function Example() {
return (
<Formik initialValues={{ value: 1 }} onReset={handleReset}>
{formProps => {
return (
<Form>
<Field name="value" type="number" />
<button type="reset">
Reset
</button>
</Form>
);
}}
</Formik>
);
}
Я бы все же выбрал первое решение, хотя лично.