Vue3组合式函数深度实战:构建高复用业务逻辑库

2025-07-29 0 481

Vue3组合式函数深度实战:构建高复用业务逻辑库

一、设计优势

组合式函数使业务逻辑复用率提升300%,代码量减少50%

当前计数: {{ counter.count }}


二、核心实现

1. 基础计数器Hook

// useCounter.js
import { ref } from 'vue';

export function useCounter(initialValue = 0) {
    const count = ref(initialValue);
    
    const increment = () => count.value++;
    const decrement = () => count.value--;
    const reset = () => count.value = initialValue;
    
    return { 
        count,
        increment,
        decrement,
        reset
    };
}

// 组件中使用
import { useCounter } from './useCounter';

export default {
    setup() {
        const counter = useCounter(10);
        return { counter };
    }
}

2. 异步状态管理Hook

// useAsync.js
import { ref } from 'vue';

export function useAsync(asyncFunction) {
    const data = ref(null);
    const error = ref(null);
    const loading = ref(false);
    
    const execute = async (...args) => {
        loading.value = true;
        try {
            data.value = await asyncFunction(...args);
            error.value = null;
        } catch (err) {
            error.value = err;
        } finally {
            loading.value = false;
        }
    };
    
    return { data, error, loading, execute };
}

// 使用示例
const { data, execute, loading } = useAsync(fetchUserList);

三、高级应用

1. 表单验证Hook

// useFormValidation.js
import { reactive, computed } from 'vue';

export function useFormValidation(rules) {
    const form = reactive({});
    const errors = reactive({});
    
    const validate = () => {
        let isValid = true;
        
        Object.keys(rules).forEach(key => {
            const rule = rules[key];
            const value = form[key];
            
            if (rule.required && !value) {
                errors[key] = rule.message || '必填字段';
                isValid = false;
            }
            
            if (rule.pattern && !rule.pattern.test(value)) {
                errors[key] = rule.message || '格式不正确';
                isValid = false;
            }
        });
        
        return isValid;
    };
    
    return { form, errors, validate };
}

// 使用示例
const { form, errors, validate } = useFormValidation({
    username: { required: true },
    email: { pattern: /^[^s@]+@[^s@]+.[^s@]+$/ }
});

2. 组合Hook实现复杂逻辑

// 组合多个Hook
export default {
    setup() {
        const counter = useCounter();
        const { data: posts, execute: fetchPosts } = useAsync(fetchPostList);
        const { form, validate } = useFormValidation({
            title: { required: true }
        });
        
        const submit = async () => {
            if (validate()) {
                await fetchPosts({ page: counter.count });
            }
        };
        
        return { counter, posts, form, submit };
    }
}

四、完整案例

用户搜索系统

{{ searchError.message }}
  • {{ user.name }}
// useUserSearch.js
import { useAsync, useFormValidation } from './hooks';

export function useUserSearch() {
    const { form, validate } = useFormValidation({
        keyword: { required: true }
    });
    
    const { 
        data: searchData,
        error: searchError,
        loading: searchLoading,
        execute: executeSearch
    } = useAsync(searchUsers);
    
    const search = async () => {
        if (validate()) {
            await executeSearch(form.keyword);
        }
    };
    
    return { 
        searchForm: form,
        searchData,
        searchError,
        searchLoading,
        search
    };
}

const { createApp, ref } = Vue;

function useCounter(initialValue = 0) {
const count = ref(initialValue);
const increment = () => count.value++;
const decrement = () => count.value–;
return { count, increment, decrement };
}

createApp({
setup() {
const counter = useCounter();
return { counter };
}
}).mount(‘#app’);

Vue3组合式函数深度实战:构建高复用业务逻辑库
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

淘吗网 vue3 Vue3组合式函数深度实战:构建高复用业务逻辑库 https://www.taomawang.com/web/vue3/683.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务