首页 > 其他分享 >Vue3的Composition API:Composition API是Vue3的一大新特性,它提供了一种更灵活的方式来组织和复用代码,特别是在处理大型组件或项目时

Vue3的Composition API:Composition API是Vue3的一大新特性,它提供了一种更灵活的方式来组织和复用代码,特别是在处理大型组件或项目时

时间:2024-06-22 19:29:53浏览次数:12  
标签:count computed 代码 API Vue3 ref Composition

1. 介绍

1. 什么是 Composition API

 

Composition API 是 Vue.js 3.0 中引入的一项新特性,提供了一种新的、更灵活的方式来组织 Vue 组件的代码。Composition API 是基于函数的,并允许在组件的 setup 函数中直接处理响应式数据和生命周期钩子,使得代码更加清晰,更便于维护和测试。

 

2. Composition API 的由来及其需要解决的问题

 

在 Vue 2.x 版本中,我们使用的是 Options API 来组织组件代码,包括 data、methods、computed、watch、生命周期钩子等都是作为组件选项来定义的。然而,在大型项目和复杂组件中,这种按选项划分的方式可能会导致一个组件的代码被分散在各个选项中,难以进行功能上的划分。此外,Options API 在代码复用(mixins, scopes slots)上也存在各种问题。

 

基于这些问题,Vue 团队设计了 Composition API,提供了一种基于函数的、按功能组织代码的方式,以解决以上问题,并更好地支持 TypeScript。

 

3. 和 Options API 的对比

 

与 Options API 不同,Composition API 是基于函数的,可以在一个逻辑单元内完成数据定义、响应性绑定、计算属性定义、观察者定义、生命周期钩子等操作。这样,我们可以将相关功能的所有逻辑结合在一起,而不是在不同的选项中分散代码。

 

比如在 Options API 中,你可能需要在 data、computed、watch 和 methods 中定义和管理一个功能的代码。而在 Composition API 中,你可以在一个函数中完成所有操作。

 

4. Composition API 的优点

 
  • 代码组织:可以按功能或逻辑组织代码,使相关逻辑保持在一起,提高代码的可读性和可维护性。

  • 代码复用和抽象:可以方便地在组件间复用和分享逻辑,通过自定义的 function抽象复杂逻辑。

  • 更好的 TypeScript 支持:由于 Composition API 是基于函数的,和 TypeScript 的结合更自然,可以提供更好的类型推断。

  • 更轻量和更快:Composition API 对于编译器和内部运行时的影响更小,渲染速度更快。

2. 基础实例和函数

1. ref 和 reactive:创建响应式数据

 

在 Composition API 中,ref 和 reactive 是两个用于创建响应式数据的函数。ref 用于为单个变量创建响应性,返回一个响应性对象,对象内部只有一个 .value 属性包含原始值。reactive 则用于创建响应性对象,可以理解为 Vue 2.x 中的 data 选项。

import { ref, reactive } from 'vue'

const count = ref(0)
const state = reactive({ count: 0 })

console.log(count.value) // 0
console.log(state.count) // 0
 

2. computed:计算属性

 

computed 函数用于创建计算属性,类似于 Vue 2.x 中的 computed 选项。它接收一个 getter 函数,并返回一个带有响应性的 ref 对象。

import { ref, computed } from 'vue'

const count = ref(0)
const double = computed(() => count.value * 2)

console.log(double.value) // 0
count.va

标签:count,computed,代码,API,Vue3,ref,Composition
From: https://blog.csdn.net/weixin_37954941/article/details/139886133

相关文章

  • Vite-Wechat网页聊天室|vite5.x+vue3+pinia+element-plus仿微信客户端
    基于Vue3+Pinia+ElementPlus仿微信网页聊天模板Vite5-Vue3-Wechat。vite-wechat使用最新前端技术vite5+vue3+vue-router@4+pinia+element-plus搭建网页端仿微信界面聊天系统。包含了聊天、通讯录、朋友圈、短视频、我的等功能模块。支持收缩侧边栏、背景壁纸换肤、锁屏、最大化等......
  • 架构师必知的11种API性能优化方法
    前言接口性能优化是后端开发人员经常碰到的一道面试题,因为它是一个跟开发语言无关的公共问题。这个问题既可以很简单,也可以相当复杂。有时候,只需要添加一个索引就能解决。有时候,代码需要进行重构。有时候,必须增加缓存。有时候,需要引入一些中间件,例如消息队列(MQ)。有时候,需......
  • [本科项目实训] 行动模拟实现 与 FastAPI 对应交互-V0
    to2024/06/01行动模拟该项目拟通过大语言模型分析拆解人类描述的任务,自动的调用行动库进行执行并完成内容的汇报。因而需要针对任务对大模型进行微调(比如本项目使用的p-tuningv2),行动模拟即针对微调结果将大模型与行动库进行对接,模拟实际场景下的函数输入输出。第一步,即加......
  • 使用 Web Share API 分享内容
    WebShareAPI是一个新的标准,允许网页向操作系统的原生分享功能发起请求。这使得用户可以更方便地分享网页上的内容到其他应用或者社交媒体上。什么是WebShareAPI?WebShareAPI是一个JavaScriptAPI,允许网页开发者通过调用浏览器原生分享功能,让用户分享内容到其他应......
  • mach(zig):从webGPU api了解渲染通道&shader
    学opengl3.3教程,你将了解通用图形渲染api。学vulkan,你将用1000+行代码画一个三角形。学webGPUapi,你将获得跨平台的图形api设计规范。reddit上有人说:OpenGL只是与3D硬件连接的几个应用程序接口之一。所有这些应用程序接口的基本概念都是一样的,即使应用程序本身的方式略有不......
  • 对比Vue2/Vue3项目如何自定义插件
    学习目标:对比Vue2/Vue3项目如何自定义插件学习内容:插件(Plugins)是一种能为Vue添加全局功能的工具代码。一个插件可以是一个拥有 install() 方法的对象,也可以直接是一个安装函数本身。安装函数会接收到安装它的应用实例传递给Vue.use()/ app.use() 的额外选项作......
  • 314 API Versions 01(UrlSegmentApiVersionReader)
    示例1、准备两个版本的CitiesController.cs删除不在需要的TestController.csControllers文件夹下新建v1文件夹,将CitiesController.cs移动到v1中,弹出的对话框点击OK和Yes;新建v2文件夹,拷贝一份CitiesController.cs,命名空间改成v2;v2CitiesController.cs如下usingSyste......
  • 316 API Versions 03(Enabling API Versions in Swagger)
    更新Program.cs添加两个版本的SwaggerDoc//Swaggerbuilder.Services.AddEndpointsApiExplorer();//generatesdescriptionforallendpointsbuilder.Services.AddSwaggerGen(options=>{options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory,"api.x......
  • Android14之java层:增加系统API(二百二十)
    简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!优质专栏:Audio工程师进阶系列【原创干货持续更新中……】......
  • 深度学习--tensorflow中操作张量的高频率api--87
    目录1.创建张量2.shape操作3.数学运算4逻辑运算5.张量之间的操作6.数据类型的转换7.聚合(规约)操作8argmax1.创建张量tf.constant(value,dtype=None,shape=None,name='Const')tf.zeros(shape,dtype=tf.float32,name=None)tf.ones(shape,dtype=tf.float32,name......