在最近的网络应用程序中,我们有很多具有相同提交结构的表单:
isSubmitting 变量禁用表单和提交按钮Yup)isSubmitting 设置回 false + 设置并在输入字段上显示 validationErrors我尝试过使用 vue 3 中的组合 api 进行一些操作。
登录.vue
{{ t('sign_in_account', 1) }}
useForm.js
import { ref, watch } from 'vue';
export default function useForm(initialValues, validationSchema, callback) {
let values = ref(initialValues);
let isSubmitting = ref(false);
let errors = ref({});
async function handleSubmit() {
try {
errors.value = {};
await validationSchema.validate(values.value, { abortEarly: false });
isSubmitting.value = true;
} catch (err) {
console.log('In the catch');
isSubmitting.value = false;
err.inner.forEach((error) => {
errors.value = { ...errors.value, [error.path]: error.message };
});
}
}
watch(isSubmitting, () => {
if (Object.keys(errors.value).length === 0 && isSubmitting.value) {
callback(values);
isSubmitting.value = false;
} else {
isSubmitting.value = false;
}
});
return { handleSubmit, isSubmitting, errors };
}
这在某种程度上有效,但我错过了两件事。在 useForm 中,我想等到回调完成(成功或失败)才能将 isSubmitting 设置回 false。承诺是做到这一点的好方法吗?还有更好的方法吗?其次,我想要一种可重用的方法来处理 Login.vue 中的错误。有什么建议如何处理这个问题吗?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
关于你的第一个问题 -
try..catch语句有第三个名为finally的语句,该语句始终在try语句块完成后执行。回答你的第二个问题 - 承诺是处理异步逻辑的好方法,包括你发送请求的 API 返回错误响应的情况,然后你可以决定如何处理这种情况下的用户体验。
我不太清楚以可重用的方式处理
Login.vue中的错误是什么意思,但也许您可以简单地将一个空数组道具传递给名为formErrors的useForm并让您的useForm.js发出一个update:modelValue事件以获得双向绑定。