首页 > 其他分享 >Vue 3 Composition API 详解

Vue 3 Composition API 详解

时间:2024-01-12 16:06:28浏览次数:37  
标签:Vue 响应 reactive API Composition 属性

一、引言

在Vue 3中,引入了一个新的Composition API,旨在提供一种更灵活和可重用的方式来组织组件代码。Composition API基于函数式编程思想,允许开发者将逻辑和状态管理逻辑分离,使代码更加清晰和可维护。

二、Composition API的核心概念

  1. 响应式数据

在Vue 3中,响应式数据是组件状态的重要组成部分。通过使用reactive函数,你可以创建响应式对象,其属性会随着对象属性的改变而自动更新。这对于构建状态管理非常有用。

import { reactive } from 'vue';  
	const state = reactive({  
	  count: 0,  
	  name: 'Vue 3'  
	});

在Vue 3中,响应式数据是通过reactive函数创建的。reactive函数返回一个响应式对象,该对象的属性值会自动更新并反映其依赖项的变化。这意味着当对象的属性值发生变化时,任何依赖于这些属性的部分都将自动更新。

  1. Refs与Reactive

在Vue 3中,你可以使用ref来包装响应式数据。ref用于创建响应式引用,你可以通过.value属性来访问它的值。相比之下,reactive用于创建响应式对象。

import { ref } from 'vue';  
	const count = ref(0); // 创建一个响应式引用  
	console.log(count.value); // 访问值

使用ref函数可以创建响应式引用,这对于包装单个值非常有用。通过.value属性可以访问或修改引用的值。与reactive不同,ref更加适合包装简单类型的值(如数字、字符串、布尔值等)。

  1. 计算属性

在Vue 3中,计算属性通过computed函数定义。计算属性是基于其依赖项进行缓存的,只有在其依赖项发生变化时才会重新计算。这可以避免不必要的计算和性能开销。

import { reactive, computed } from 'vue';  
	const state = reactive({  
	  firstName: 'Foo',  
	  lastName: 'Bar'  
	});  
	const fullName = computed(() => `${state.firstName} ${state.lastName}`); // 计算属性

计算属性是在Vue 3中用于执行更复杂的数据操作的强大工具。它们基于其依赖项进行缓存,这意味着只有在依赖项发生变化时才会重新计算属性值。这有助于提高性能,因为不必要的计算和重复操作被避免了。计算属性可以通过computed函数定义,并返回一个函数,该函数根据其依赖项返回相应的值。在上面的例子中,我们定义了一个计算属性fullName,它将返回一个拼接了firstNamelastName的值。只有当这些依赖项中的任何一个发生更改时,fullName才会重新计算。

  1. watchEffect

watchEffect函数允许你在特定依赖项更改时执行副作用操作。它类似于Vue 2中的watch,但更加灵活。你可以在组件的setup函数中使用watchEffect来观察和响应数据变化。

import { watchEffect } from 'vue';  
	import { useState } from 'vue';  
	export default {  
	  setup() {  
	    const state = reactive({ name: 'Vue 3' });  
	    const [count, setCount] = useState(0);  
	    watchEffect(() => {  
	      console.log(state.name); // 观察state.name的变化并执行副作用操作  
	    });  
	    return { count }; // 返回响应式数据供模板使用  
	  }  
	};

watchEffect函数在Vue 3中提供了一种观察和响应数据变化的方式。它类似于Vue 2中的watch,但更加灵活和强大。你可以在组件的setup函数中使用watchEffect来注册副作用操作,这些操作将在特定依赖项发生变化时执行。在上面的例子中,我们使用watchEffect来观察state.name`的变化,并在控制台中打印出新的值。通过这种方式,你可以在数据变化时执行异步或长时间运行的操作,例如API调用、动画处理等。

三、Composition API的使用场景

  1. 重用逻辑: 使用reactiveref,你可以轻松地创建可重用的状态片段。
  2. 逻辑复用computed属性允许你根据其他响应式数据创建新的响应式数据。
  3. 副作用操作watchEffect允许你在特定依赖项更改时执行异步或长时间运行的操作。

四、Composition API的最佳实践

  1. 避免全局状态管理: Composition API鼓励将状态局部化,避免全局状态管理。
  2. 使用 setup 函数: 在Vue 3中,每个组件都需要一个setup函数,这是使用Composition API的主要场所。
  3. 合理使用 Ref 和响应式对象: 根据需要选择使用ref还是响应式对象来存储数据。
  4. 利用 Composition API 的优势: 如上文所述,利用好reactiverefcomputedwatchEffect来优化你的组件代码结构。

五、与 Options API 的比较和迁移策略

  1. Options API的限制: 在Vue 3中,Options API(即Vue 2中的声明式渲染方式)在某些情况下可能显得笨重和不够灵活。
  2. 迁移策略: 逐步迁移到Composition API,同时保持与Options API的兼容性,以便于平滑过渡。

六、总结

Vue 3的Composition API为开发者提供了一种新的方式来组织和重用组件逻辑。通过理解和掌握Composition API的核心概念、使用场景和最佳实践,开发者可以构建出更加清晰、可维护和高效的Vue应用程序。尽管Migration API提供了一种向Composition API过渡的方式,但开发者仍需注意两者的区别和最佳实践,以确保应用程序的稳定性和性能。

标签:Vue,响应,reactive,API,Composition,属性
From: https://blog.51cto.com/u_15723831/9218712

相关文章

  • VUE怎么提示,当用户关闭标签页,提示离开此网站?系统可能不会保存
    如果您想在用户关闭标签页时提示而不是基于路由的导航离开,您可以使用beforeunload事件。在Vue中,可以在组件的mounted钩子中添加事件监听器。以下是一个简单的示例:<template><div><!--YourVuecomponentcontentgoeshere--></div></template><script>expo......
  • 调用百度API实现经纬度转换
    百度API官网  登入后点击控制台,选择应用管理、我的应用、创建应用,等应用创建成功后复制访问应用AK的值; 经纬度转换工具类<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4......
  • Apipost接口自动化测试如何操作
    Apipost提供可视化的API自动化测试功能,使用Apipost研发人员可以设计、调试接口,测试人员可以基于同一数据源进行测试,Apipost接口自动化功能在上次更新中进行了逻辑调整,带来更好的交互操作、更多的控制器选择,同时新增同步接口模式选择、测试数据选择功能。添加接口使用Apipost,研发......
  • 从0开始使用vue-cli构建Vue3项目
    一、环境检查1、环境是否正常#查询Node版本node-v#查询vue版本npminfovue#查询vue-cli版本vue-V2、如果没有安装vue-cli,可以执行下方命令安装vue-cli最新版本npminstall-g@vue/cli如果是旧版本,可以执行下方命令卸载旧版本,然后再安装新版本的脚手架npmuninstallv......
  • vue使用flexible.js 最大宽度只有540
    分辨率大于540px的时候,flexible限制为540,一般的手机显示没有问题,但对于大于540的竖屏屏幕,可能右边就会留白。我想让横屏的时候限制在540,竖屏的时候根据页面实际宽度自适应,解决方法如下:1、安装npminstalllib-flexible--save 2、为了避免每次安装的时候,都被覆盖掉,打开\nod......
  • Vue.nextTick在动态更新iframe的src中的使用
    Vue.nextTick在动态更新iframe的src中的使用:https://codeleading.com/article/63673310260/ 当iframe中的地址src需要动态改变时,需要使用Vue.nextTick来切换地址src,否则DOM的地址不会实现更新,而是保持上一次的src。在数据变化后要执行的某个操作,而这个操作需要使用随数据改变......
  • vue入门——???06days
    案例回顾:点击显示小电影案例-按钮点击事件-axios.get().then(res=>{res.data#响应体的内容})-v-for循环---》div#2计算属性-必须要有返回值,返回值当做属性的值-方法当属性用-computed中-它依赖的变量发生变......
  • vue 高德地图异步引用
    先建立一个文件,引入高德  gDMapLoader.jsconstak='4e9f15de14b05fd8f19e1d8fbe91f0a3'exportdefaultfunctionload(){returnnewPromise(function(resolve,reject){if(window.AMap){resolve(window.AMap)}else{varscript=doc......
  • API文档、API自动化测试神器:Apipost
    在数字化时代,API已成为企业和开发者实现数据互通、应用集成的重要桥梁。然而,随着API数量的不断增加,API设计、调试、文档和测试等工作也变得越来越复杂。为了解决这一痛点,一款名为Apipost的API协同研发工具应运而生,它为API开发者提供了一站式解决方案。成功案例许多知名的公司和团队......
  • 27-K8 CRD:如何根据需求自定义你的 API?
    随着使用的深入,你会发现Kubernetes中内置的对象定义,比如Deployment、StatefulSet、Configmap,可能已经不能满足你的需求了。你很希望在Kubernetes定义一些自己的对象,一来可以通过kube-apiserver提供统一的访问入口,二来可以像其他内置对象一样,通过kubectl命令管理这些自定......