首页 > 其他分享 >Vue 3 Composition API:构建可复用逻辑的艺术

Vue 3 Composition API:构建可复用逻辑的艺术

时间:2024-08-12 12:57:11浏览次数:12  
标签:Vue const 函数 复用 state API Composition

Vue 3 引入了 Composition API,这是一种新的组件选项,允许开发者更灵活地组织组件逻辑。使用 Composition API,我们可以将组件逻辑分解为可复用的函数,从而提高代码的模块化和可维护性。本文将详细介绍如何使用 Vue 3 的 Composition API 创建可复用的逻辑。

一、Composition API 简介

Composition API 提供了一系列的函数,如 setupreactiverefcomputedwatch 等,这些函数可以在 setup 函数中使用,以声明性地描述组件的逻辑。

二、基本的 Composition API 使用

在 Vue 3 中,每个组件都可以使用 setup 函数来组织逻辑。setup 是 Composition API 的入口,它在组件创建之前执行。

import { ref, computed } from 'vue';

export default {
  setup() {
    const count = ref(0);

    const doubleCount = computed(() => count.value * 2);

    function increment() {
      count.value++;
    }

    return { count, doubleCount, increment };
  }
};

三、创建可复用的逻辑

使用 Composition API,我们可以将逻辑封装在自定义的函数或组合式函数中,然后在多个组件中复用这些逻辑。

3.1 创建可复用的响应式状态

import { ref } from 'vue';

// 创建一个响应式状态的工厂函数
export function useResponsiveState(initialValue) {
  const state = ref(initialValue);
  return state;
}

3.2 创建可复用的计算属性

import { computed } from 'vue';

// 创建一个计算属性的工厂函数
export function useComputedProperty(dependencies, calculate) {
  return computed(() => calculate(...dependencies));
}

3.3 创建可复用的观察者

import { watch } from 'vue';

// 创建一个观察者的工厂函数
export function useWatcher(source, callback) {
  watch(source, (newValue, oldValue) => {
    callback(newValue, oldValue);
  });
}

四、使用工厂函数

在组件中使用这些工厂函数,可以轻松地复用逻辑。

import { useResponsiveState, useComputedProperty, useWatcher } from './composables';

export default {
  setup() {
    const state = useResponsiveState(0);

    const doubleState = useComputedProperty([state], (s) => s * 2);

    useWatcher(doubleState, (newValue, oldValue) => {
      console.log(`Double state changed from ${oldValue} to ${newValue}`);
    });

    function increment() {
      state.value++;
    }

    return { state, doubleState, increment };
  }
};

五、高级技巧

5.1 组合式函数的嵌套使用

组合式函数可以相互嵌套,创建更复杂的逻辑。

export function useComplexLogic(simpleState) {
  const derivedState = useComputedProperty([simpleState], (s) => s * 10);
  useWatcher(derivedState, (newValue, oldValue) => {
    // 执行更复杂的逻辑
  });
  return derivedState;
}

5.2 提供和注入

Vue 3 允许使用 provideinject 在组件树中提供和使用数据。

import { provide, inject } from 'vue';

export default {
  setup() {
    const state = useResponsiveState(0);
    provide('state', state);

    // 在子组件中
    const injectedState = inject('state', ref(0));
    return { injectedState };
  }
};

5.3 使用 reactive 处理复杂状态

对于包含多个属性的复杂状态,可以使用 reactive 创建一个响应式对象。

import { reactive } from 'vue';

export function useComplexState() {
  const state = reactive({
    count: 0,
    message: 'Hello World'
  });
  return state;
}

六、结论

Vue 3 的 Composition API 提供了一种强大的方式来构建可复用的逻辑。通过使用工厂函数、组合式函数、provideinject,以及 reactive,我们可以创建可维护、可测试和可复用的组件逻辑。本文详细介绍了 Composition API 的基本概念和高级技巧,希望能够帮助开发者更好地利用 Vue 3 的强大功能。

标签:Vue,const,函数,复用,state,API,Composition
From: https://blog.csdn.net/2401_85439108/article/details/141128576

相关文章

  • Vue 3 SSR的革新之旅:服务器端渲染的改进与实践
    服务器端渲染(SSR)是一种将Web应用的UI渲染过程放在服务器端进行的技术。Vue3对SSR的支持进行了全面改进,提升了性能和开发体验。本文将探讨Vue3中SSR的改进点,并提供实践指南。一、SSR的概念与优势SSR允许服务器直接发送完整的HTML文档给客户端,这有助于提高首屏加载速度,改......
  • vue2 - element弹框自定义指令 实现拖动、缩放
    directive/dialogDrag.jsimportVuefrom"vue";Vue.directive('dialogDrag',{bind(el,binding,vnode,oldVnode){//弹框可拉伸最小宽高letminWidth=400;letminHeight=300;//初始非全屏letisFullScreen......
  • ABC366F Maximum Composition 题解
    ABC366FMaximumComposition题解题目大意给定\(N\)个一次函数\(f_i(x)=a_ix+b_i\),从中选出\(K\)个函数\(f_{p_1},f_{p_2},\dots,f_{p_K}\),使得\(f_{p_1}(f_{p_2}(\dotsf_{p_K}))\)最大,求最大值。Solve考虑这样一种情况:我已经选定\(p_{k+1},p_{k+1},\dots,p_K\),现......
  • 文件IO常用api
    文件IO常用api打开/关闭文件fopen该api用于打开指定的文件FILE*fopen(constchar*__restrict__filename,constchar*__restrict__modes)constchar*__restrict__filename:表示要打开的文件和路径constchar*__restrict__modes:表示要访问模式return:结构体指针表示......
  • vue鼠标点击和滑动锚点
    效果<ulclass="list"><liclass="item"v-for="iteminletters":key="item":ref="item"@click="handleLetterClick"@touchstart.prevent="handleTouchStart&quo......
  • 使用API Monitor探测QQ安装包在创建桌面快捷方式时都调用了哪些API及COM接口,去解决C++
    目录1、通过代码制作安装包程序,不再使用专用的打包工具2、问题说明3、为啥路径中包含环境变量%ProgramFiles%会报找不到路径呢?4、使用APIMonitor监测QQ安装包在创建桌面快捷方式时都调用哪些COM组件的接口5、同时勾选IShelllinkDatalist接口类的接口,重新开启监测6、最后......
  • vue实现录音并转文字功能,包括PC端web,手机端web
    vue实现录音并转文字功能,包括PC端,手机端和企业微信自建应用端不止vue,不限技术栈,vue2、vue3、react、.net以及原生js均可实现。原理浏览器实现录音并转文字最快捷的方法是通过WebSpeechAPI来实现,这是浏览器内置示例的api方法,可以直接调用,无需引入任何依赖包,唯一需要注意的是浏览......
  • Vue自定义指令——函数式与对象式以及注意事项
    作者:CSDN-PleaSure乐事欢迎大家阅读我的博客希望大家喜欢使用环境:vscodeChrome浏览器目录1.什么是自定义指令1.1定义2.函数式自定义指令2.1定义2.2书写格式与效果3.对象式自定义指令3.1定义3.2书写格式与效果4.需要注意的坑4.1命名4.1.1问题4.1.2原因4.1.3......
  • 调用百度api的情绪分析网站(Flask+HTML)搭建(附超详细代码)
      概要:本文调用多个api接口来进行不同类型(数据文件)情绪分析处理,并利用flask框架与前端联调将自己的情绪分析项目部署到服务器端。。实现下图功能。(第一篇文章小小记录下,要是有帮助就点个赞叭)一.免费申请百度api并调用首先在百度智能云中申请免费的自然语言处理api选......
  • Android studio报错 Caused by: org.gradle.api.internal.plugins.PluginApplicationE
    Androidstudio报错Causedby:org.gradle.api.internal.plugins.PluginApplicationExceptionAndroidstudio运行报错:Causedby:org.gradle.api.internal.plugins.PluginApplicationException:Failedtoapplyplugin[id‘com.android.application’]解决方法:在项......