react-hook-form:检查未保存的更改
react-hook-form: Check for unsaved changes
我有一个由 react-hook-form
控制的预填表格:
const {control, handleSubmit, formState, setValue, reset} = useForm<UserDetailsForm>({
mode: 'onChange',
defaultValues,
});
const {errors, isDirty, isValid} = formState;
...
提交按钮:
<Button
variant="link"
title="Save Changes"
onPress={handleSubmit(handleProceed)}
disabled={!isDirty || !isValid}
/>
返回时,我需要检查表单是否有未保存的更改,如果有则显示警告。
我该如何检查?我尝试检查 formState
变量,但它似乎不包含类似的东西。
您可以使用 isDirty
标志来查看用户是否修改了任何表单字段:
const { ..., formState } = useForm(...);
const { isDirty } = formState;
isDirty
提交后没有设置为false
所以如果你想清除它,你需要调用reset
:
const onSubmit = (data) => {
// ...
// set isDirty to false unless you set keepDirty: true in the option argument
reset({}, { keepValues: true, keepIsValid: true });
};
我有一个由 react-hook-form
控制的预填表格:
const {control, handleSubmit, formState, setValue, reset} = useForm<UserDetailsForm>({
mode: 'onChange',
defaultValues,
});
const {errors, isDirty, isValid} = formState;
...
提交按钮:
<Button
variant="link"
title="Save Changes"
onPress={handleSubmit(handleProceed)}
disabled={!isDirty || !isValid}
/>
返回时,我需要检查表单是否有未保存的更改,如果有则显示警告。
我该如何检查?我尝试检查 formState
变量,但它似乎不包含类似的东西。
您可以使用 isDirty
标志来查看用户是否修改了任何表单字段:
const { ..., formState } = useForm(...);
const { isDirty } = formState;
isDirty
提交后没有设置为false
所以如果你想清除它,你需要调用reset
:
const onSubmit = (data) => {
// ...
// set isDirty to false unless you set keepDirty: true in the option argument
reset({}, { keepValues: true, keepIsValid: true });
};