Vue 3 可重用错误处理和可重用“useForm”中的handleSubmit使用组合 API 的函数
P粉020556231
P粉020556231 2024-03-27 16:23:57
[Vue.js讨论组]

在最近的网络应用程序中,我们有很多具有相同提交结构的表单:

  1. 基于 isSubmitting 变量禁用表单和提交按钮
  2. 验证输入字段(我们使用 Yup
  3. 如果验证失败:将 isSubmitting 设置回 false + 设置并在输入字段上显示 validationErrors
  4. 如果验证成功:将带有表单数据的 post 请求发送到 api
  5. 如果 api 关闭或返回错误,则显示一般错误

我尝试过使用 vue 3 中的组合 api 进行一些操作。

登录.vue



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 中的错误。有什么建议如何处理这个问题吗?

P粉020556231
P粉020556231

全部回复(1)
P粉301523298

关于你的第一个问题 - try..catch 语句有第三个名为 finally 的语句,该语句始终在 try 语句块完成后执行

回答你的第二个问题 - 承诺是处理异步逻辑的好方法,包括你发送请求的 API 返回错误响应的情况,然后你可以决定如何处理这种情况下的用户体验。

我不太清楚以可重用的方式处理 Login.vue 中的错误是什么意思,但也许您可以简单地将一个空数组道具传递给名为 formErrorsuseForm 并让您的 useForm.js 发出一个update:modelValue 事件以获得双向绑定。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号