vue组合式API浅显入门示例详解

目录
  • 正文
  • 组合式API
  • setup
  • 变量声明
  • 目前比起选项式API的优点
  • 生命周期

正文

在react推出了hook之后,vue也在vue3里面添加了组合式API,鉴于这个时间间隔,我有理由认为组合式api和hook还是有一些关系的。不过在我具体的使用中,我并没发现这两个方法太多的相同点,不过鉴于vue自动发布之后就与react之间那剪不断理还乱的量子力学关系,估计会有很多人会问及这俩之间的异同。我还没到能分辨出异同的地步,就简单的介绍一下vue的组合式API吧。

组合式API

在vue3.0发布的时候,组合式API也随着发布会进入到大众的视野。官网把原来的使用方式命名为选项式API,同时官网也明确表示选项式API是由组合式API所实现的,所以大概后面vue的主推方向应该就是组合式API了。

我学习框架的方法是从语法到词法,再到运行状态。那么先从语法开始学习,照旧还是以官网为例。

//代码一
<script setup>
    import { ref, onMounted } from 'vue'
    // 响应式状态
    const count = ref(0)
    // 用来修改状态、触发更新的函数
    function increment() {
        count.value++
    }
    // 生命周期钩子
    onMounted(() => {
        console.log(`The initial count is ${count.value}.`)
    })
</script>
<template>
    <button @click="increment">Count is: {{ count }}</button>
</template>

可以看出,组合式API和原来的选项式API还是有差别的,原来的选项式API可以直接使用生命周期,变量声明之类的内置方法,组合式API则需要先引入再使用。

先声明一下,这个不是vue3.0版本的组合式API写法,是vue3.2版本发布时的语法糖,但是也是我个人建议使用的方法,毕竟不推荐的话也不会出这个语法糖。3.0版本的写法有些繁琐,但是大致上大差不差。

//代码二
import { reactive } from 'vue'
export default {
    // `setup` 是一个专门用于组合式 API 的特殊钩子函数
    setup() {
        const state = reactive({ count: 0 })
        // 暴露 state 到模板
        return { state }
    }
}

这个是最初的组合式API的写法,比起新版的语法糖只是多了一个setup和需要将变量return出来,而这个setup就是我认为的组合式API的核心。

setup

最初的响应式API以 setup 函数作为入口函数, setup函数必须返回两种类型的值:第一是对象,第二是函数。

当 setup 函数返回对象时,对象中的数据或方法可以在 template中被使用,也就相当于data函数里面的变量。当 setup函数返回函数时,函数会被作为 render 函数。

不过可预见的是当页面数据量变大的时候,setup函数会变得巨大,而且return的内容也会膨胀,所以vue3.2的语法糖省略了setup函数的包裹,而是直接将setup放到script里面,里面的代码就等同于放到了setup函数中,而且还省略了return的步骤。虽然没有写出setup函数,但是这段代码的本质就是setup函数的执行。

变量声明

setup函数执行之后,里面的变量会被直接暴露给组件,由组件使用。就以最上面的代码一中的count为例,count被声明之后就可以放到template里面,还可以被increment函数修改后在页面中更新,这个就是靠ref方法,但是说ref之前先要说一下组合式API生命对象的方法reactive。

代码二中的state就是reactive方法声明的对象,reactive和ref一样,都是用来声明变量的,只有通过这两个方法声明后的变量才能做到响应式更新。这里其实是vue为了让用户简单而导致的复杂,具体说比较复杂,我就简单说说吧。

vue3依然是响应式的架构,通过对声明的变量监听从而收集到变量的修改事件,已达到响应式更新的功能。对vue3有一些了解的用户都知道,vue3用的是proxy,但是proxy只能做到对对象代理,如果使用了原始类型,像是string,number之类的就没有办法了,所以vue3为了监听原始类型的数据,使用ref去声明原始类型,从而将原始类型变成对象,看起来通过ref声明后的依然是原始类型,实际上我们修改的是这个变量的value的值,而不是这个对象的值。

组合式API还有一点就是无法直接修改声明的变量值。以代码一为例,无论是count = 3还是count=ref(3)都会导致显示无法更新。同样的,代码二中的state的修改也不可以直接通过state=reactive({a:23})或者state = {a:23}的方式修改。

虽说ref也可以用来生命对象,不过还是不太建议,毕竟还是按照文档的方式去写才能做到最方便的维护,毕竟比维护别人的烂代码更难受的就是维护自己的烂代码。

当 ref 在模板中作为顶层属性被访问时,它们会被自动“解包”,所以不需要使用 .value。所以代码一中,template中的count不需要写作count.value。

说回组合式API,变量修改之后,组合式API和选项式API一样,是无法做到立刻将显示更新的,所以想要获取到变量修改后的页面元素就需要nextTick,用法和vue的nextTick是一样的,就不多赘述了。

目前比起选项式API的优点

从代码一和代码二中可以看出,组合式API里面不需要将变量放到data里面,函数放到method里面,这样的话可以让有相关性的变量和函数放到一起。开发选项式API的时候当页面数据量大的时候在method写函数的时候忘记了变量名称,就需要滑到data里面看一下,然后在滑回method继续写函数。组合式API不能说完全避免,但是能大大减少这种情况的出现。

生命周期

生命周期官网图片还是挺全的,基本上和选项式API差不多,就是改改名字,去掉了create,改用setup。

Vue2.x Vue3
beforeCreate setup
created
beforeMount onBeforeMount
mounted onMounted
beforeUpdate onBeforeUpdate
updated onUpdated
beforeDestroy onBeforeUnmount
destroyed onUnmounted

从这篇文章中找到了一个对比的列表,大体上是可以一一对应的。生命周期的逻辑我就不多赘述了,由于用法不同,所以这里我就根据代码一放一个错误的例子。

setTimeout(() => {
    onMounted(() => {
        // 异步注册时当前组件实例已丢失
        // 这将不会正常工作 })
     }, 100
 )

生命周期可以放到函数里面,然后在setup里面调用,但是不能放到异步函数里面。

大体上回了这些就可以开始开发项目了,至于计算属性,监听器之类的,那都是后面的事情,这只是入门文章,过于入门了,所以并不建议熟练掌握的阅读此文。

以上就是vue组合式API浅显入门示例详解的详细内容,更多关于vue组合式API入门的资料请关注我们其它相关文章!

(0)

相关推荐

  • 一文详解Vue选项式 API 的生命周期选项和组合式API

    目录 Vue2.Vue3 生命周期的变化 选项式 API 的生命周期选项的变化 小知识 组合式 生命周期选项 API VNode 生命周期事件 Vue2x Vue3x Vue2.Vue3 生命周期的变化 正好在看Vue的官方文档,也正好比对一下,做一下笔记 选项式 API 的生命周期选项的变化 Vue2.x Vue3 beforeCreate beforeCreate created created beforeMount beforeMount mounted mounted beforeUp

  • Vue组合式API--setup中定义响应式数据的示例详解

    目录 一.Options API(选项式API)的弊端 1.1 什么是选项式API 1.2 选项式API的弊端 二.Composition API(组合式API)概述 2.1 Composition API的作用 2.2 Composition API的编码位置 三.setup函数的参数和返回值 3.1 setup函数的参数 3.2 setup函数的返回值 四.setup中如何定义响应式数据 4.1 reactive函数 4.2 ref函数 4.3 关于如何选择reactive函数和ref函数

  • vue3-组合式api-provide/inject详解

    目录 一.父组件 二.子组件 三.孙组件 四.运行项目界面效果如下 Vue3:组合式API-依赖注入(provide().inject()) 1.provide() 2.inject() provide/inject 适用于跨级通信,例如在父组件中改变值,在孙组件中通过依赖注入的方式能获取到父组件中改变的这个值 一.父组件 <template> <div> <!-- 子组件 --> <son></son> <button @click=&q

  • vue3组合式api实现v-lazy图片懒加载的方法实例

    目录 前置知识 Intersection Observer Vue3指令周期 image对象 思路 完整代码 总结 前置知识 Intersection Observer 浏览器提供api,用于检测目标元素和祖先元素/顶级文档视窗 (viewport) 交叉状态的方法. const observer = new IntersectionObserver(function (IntersectionObserverEntry) {},options); observer.observe(el); 构

  • vue  composition-api 封装组合式函数的操作方法

    目录 介绍 最佳实践 1. options对象化 2. 动态返回 3. 灵活地使用ref 4. 异步变同步 5. 简单的状态管理 参考资料 介绍 在 Vue 应用的概念中,“组合式函数”(Composables) 是一个利用 Vue 的组合式 API 来封装和复用有状态逻辑的函数. 组合式函数 | Vue.js 组合式 API 常见问答 | Vue.js Composables 函数就是利用 Vue3 提出的 Composition API ,封装出的一些可以复用的组合式函数,目前 Vue2 也

  • vue组合式API浅显入门示例详解

    目录 正文 组合式API setup 变量声明 目前比起选项式API的优点 生命周期 正文 在react推出了hook之后,vue也在vue3里面添加了组合式API,鉴于这个时间间隔,我有理由认为组合式api和hook还是有一些关系的.不过在我具体的使用中,我并没发现这两个方法太多的相同点,不过鉴于vue自动发布之后就与react之间那剪不断理还乱的量子力学关系,估计会有很多人会问及这俩之间的异同.我还没到能分辨出异同的地步,就简单的介绍一下vue的组合式API吧. 组合式API 在vue3.0

  • Python-OpenCV深度学习入门示例详解

    目录 0. 前言 1. 计算机视觉中的深度学习简介 1.1 深度学习的特点 1.2 深度学习大爆发 2. 用于图像分类的深度学习简介 3. 用于目标检测的深度学习简介 4. 深度学习框架 keras 介绍与使用 4.1 keras 库简介与安装 4.2 使用 keras 实现线性回归模型 4.3 使用 keras 进行手写数字识别 小结 0. 前言 深度学习已经成为机器学习中最受欢迎和发展最快的领域.自 2012 年深度学习性能超越机器学习等传统方法以来,深度学习架构开始快速应用于包括计算机视觉

  • Vue 服务端渲染SSR示例详解

    目录 手写Vue服务端渲染 一.开始vue-ssr之旅 二.采用模板渲染 三.ssr目录创建 四.通过webpack实现编译vue项目 app.js client-entry.js server-entry.js 五.配置客户端打包和服务端打包 六.配置运行脚本 七.服务端配置 七.通过json配置createBundleRenderer方法 八.集成VueRouter 配置入口文件 配置组件信息 防止刷新页面不存在 保证异步路由加载完成 十.集成vuex配置 在后端更新vuex 在浏览器运行时

  • vue选项卡Tabs组件实现示例详解

    目录 概述 效果图 实现过程 组件分析 所需的前置知识 项目组件文件夹 Tabs.vue TabPane.vue render.js index.js 使用 总结 概述 前端项目中,多数页面涉及到选项卡切换,包括路由切换,指令v-if等,本质上其实和选项卡切换思想差不多,如果是个简单的选项卡,还是很简单的,我们也不需要什么组件库的组件,自己也能几行代码写出来,但是涉及到动画,尺寸计算,拖拽的功能的时候,多数情况下,自己写还是要花点时间的,组件库就提供了现成的,拿来改改样式就行,为了对这个组件更加

  • vue 之 .sync 修饰符示例详解

    在一些情况下,我们可能会需要对一个 prop (父子组件传递数据的属性) 进行"双向绑定". 在vue 1.x 中的 .sync 修饰符所提供的功能.当一个子组件改变了一个带 .sync 的prop的值时,这个变化也会同步到父组件中所绑定的值. 这很方便,但也会导致问题,因为它破坏了单向数据流.(数据自上而下流,事件自下而上走) 由于子组件改变 prop 的代码和普通的状体改动代码毫无区别,所以当你光看子组件的代码时,你完全不知道它合适悄悄地改变了父组件的状态. 这在 debug 复杂

  • Vue项目接入Paypal实现示例详解

    一.支付流程 在paypal的官网上给出了这个按钮内部封装的流程,整个流程只需要用户点击按钮,触发创建订单事件,然后我们再监听用户支付成功的回调,拿到订单id传给后端,让后端再进行一次校验. 二.实现方案 接入方式 优点 缺点 相关资料 在html中插入paypal的script脚本 实现方式比较简单 1.安全性问题:公司的client_id会暴露在代码中 2.引用的按钮样式比较难自定义 官方文档:https://developer.paypal.com/docs/checkout/integr

  • Python数学建模PuLP库线性规划入门示例详解

    目录 1.什么是线性规划 2.PuLP 库求解线性规划 -(0)导入 PuLP库函数 -(1)定义一个规划问题 -(2)定义决策变量 -(3)添加目标函数 -(4)添加约束条件 -(5)求解 3.Python程序和运行结果 1.什么是线性规划 线性规划(Linear programming),在线性等式或不等式约束条件下求解线性目标函数的极值问题,常用于解决资源分配.生产调度和混合问题.例如: max fx = 2*x1 + 3*x2 - 5*x3 s.t. x1 + 3*x2 + x3 <=

  • Vue响应式原理的示例详解

    Vue 最独特的特性之一,是非侵入式的响应系统.数据模型仅仅是普通的 JavaScript 对象.而当你修改它们时,视图会进行更新.聊到 Vue 响应式实现原理,众多开发者都知道实现的关键在于利用 Object.defineProperty , 但具体又是如何实现的呢,今天我们来一探究竟. 为了通俗易懂,我们还是从一个小的示例开始: <body> <div id="app"> {{ message }} </div> <script> v

  • vue前端实现打印下载示例详解

    目录 html2canvas介绍 jspdf介绍 printjs介绍 html2canvas介绍 分享一下几个后台管理系统比较常用的插件:下载.打印 html2canvas是在浏览器上对网页进行截图操作,实际上是操作DOM,这个插件也有好长时间了,比较稳定,目前使用还没有遇到什么bug jspdf介绍 如果下载出来是pdf文件,可以加上jspdf插件,会先通过html2canvas把页面转化成base64图片,再通过jspdf导出 安装 npm i html2canvas jspdf 或 yar

  • Vue extends 属性的用法示例详解

    目录 引言 App.vue Son.vue HelloWorld.vue 小结 引言 最近在看抖音——<小山与 bug>,看到一个很神奇的 Vue 继承组件的方法,后来专门去翻了 element 和 iview 的源码,发现这个属性的用法好像在这些框架里还没有用到过,怀着试一试的态度,我就自己搭建了个测试项目,发现其实还是挺好用的,甚至有望代替目前我们前端框架业务代码混入的底层实现.话不多说,直接上代码: App.vue <template> <div> <Son

随机推荐