vue3.0组合式api的使用小结

目录
  • 1.setup使用
  • 2.生命周期函数
  • 3.vuex
  • 4.toRef介绍
  • 5.ref介绍
  • 6.组件传值
  • 7.shallowRef和shallowReactive
  • 8.watchEffect
  • 9.watch侦听器
  • 10.computed
  • 11.reactive介绍
  • 12.toRefs介绍

vue2开发缺点和vue3开发优点

  • vue2代码冗余,杂乱
  • vue3则可以把相关的功能代码抽离分割在一起,方便开发者快速阅读

1.setup使用

  • setup函数是 Composition API(组合API)的入口
  • setup是启动页面后会自动执行的一个函数
  • 项目中定义的所有变量,方法等都需要在setup中
  • 在setup函数中定义的变量和方法最后都需要 return 出去, 否则无法在视图层中使用
setup(){
  console.log('自动执行')
  const name = '林一'
  const age = 20
  const company = '阿里巴巴'

  const btn =  ()=>{
      const res = `我叫${name},今年${age}岁了,在${company}上班`
      console.log(res)
  }

  // 计算属性
  // 侦听器
  return {name,btn}
 }

2.生命周期函数

  • onBeforeMount —— 在挂载开始之前被调用
  • onMounted —— 组件挂载时调用
  • onBeforeUpdate —— 数据更新时调用
  • onUpdated —— 数据更改导致的虚拟 DOM 重新渲染,在这之后会调用该钩子
  • onBeforeUnmount —— 在卸载组件实例之前调用
  • onErrorCaptured —— 当捕获一个来自子孙组件的错误时被调用

Vue应用程序中有4个主要事件

  • 创建 — 在组件创建时执行
  • 挂载 — DOM 被挂载时执行
  • 更新 — 当响应数据被修改时执行
  • 销毁 — 在元素被销毁之前立即运行
import { onBeforeMount, ....... } from 'vue'

3.vuex

  • 同vue2一致
  • 需要安装,引入
//安装
npm install vuex@next --save
//引入
import {useStore} from 'vuex'

4.toRef介绍

  • toRef也可以创建一个响应式数据
  • ref本质是拷贝粘贴一份数据,脱离了与原数据的交互
  • ref函数将对象中的属性变成响应式数据,修改响应式数据是不会影响到原数据,但是会更新视图层
  • toRef的本质是引用,与原始数据有交互,修改响应式数据会影响到原数据,但是不会更新视图层
  • 使用需引入
import {toRef} from 'vue'
//toRef接收两个参数,第一个参数是要操作的对象,第二个参数是对象的某个属性
const obj = {name:'林一'}
toRef(obj,'name')
setup(){

    const obj = {name:'林一',age:40}
    //  const res = ref(obj.name)
    const res = toRef(obj,'name')
    const btn = ()=>{
         res.value = '林二'
         console.log(res)
         console.log(obj)
     }
    return {res,btn}
 }

5.ref介绍

  • ref 为我们的值创建了一个响应式引用
  • 使用需引用
import {ref} from 'vue'//组合式api
ref('林一')
  • 当ref里的值发生改变时,视图层会自动更新
  • ref可操作基本数据类型,也可以操作复杂数据类型:对象,数组
  • 建议:ref用来操作基本数据类型:数字,字符串
setup(){
     const name = ref('林一')
     const age = ref(52)
     const company = ref('阿里巴巴')
    //  对象类型
     const obj = ref({
         taobao:'淘宝',
         tamll:'天猫'
     })
    //  数组类型
    const arr = ref([
        {
            xiami:'林二',
            huabei:'京东'
        }
    ])
     const btn = ()=>{
        //  响应对象类型
        //  name.value = '林三'
        //  obj.value.taobao = '淘宝000'
        //  console.log(obj)
        // 响应数组类型
        arr.value[0].xiami = '京东000'
        console.log(arr)
     }
     return {name,age,company,btn,obj,arr}
 }

6.组件传值

//第一种:进入页面即刻传值(祖孙传值)
const p1 = reactive({name:'林一',age:52})
provide('p',p1)//祖传

const res = inject('p')//孙收

//第二种:点击传值
<Vue ref="val"/>//引入子组件,使用ref调用该子组件
const val = ref()
const p1 = reactive({name:'林一',age:52})
function btn(){
    val.value.receive(p1)
}

7.shallowRef和shallowReactive

  • shallowRef只处理基本类型数据
  • shallowReactive只处理第一层数据
  • 使用需引入
import { shallowReactive,shallowRef } from 'vue'
setup() {
        //shallowReactive:只处理第一层的数据
        const p1 = shallowReactive({
            name:'林一',
            product:{
                taobao:5
            }
        })
        // shallowRef:只处理基本类型数据
        const p2 = shallowRef({
            val:1
        })
        console.log(p2)
        return{...toRefs(p1),p2}
    },

8.watchEffect

  • watchEffect 如果存在的话,在组件初始化的时候就会执行一次用以收集依赖
  • watch 可以获取到新值与旧值(更新前的值),而  watchEffect是拿不到的
  • watchEffect不需要指定监听的属性,他会自动的收集依赖, 只要我们回调中引用到了 响应式的属性, 那么当这些属性变更的时候,这个回调都会执行,而 watchEffect 只能监听指定的属性而做出变更
  • 使用需引入
import { watchEffect } from 'vue'
setup() {
        const p1 = ref(0)
        const p2 = ref(1)
        const p3 = reactive({
            name:'林一',
            age:50,
            product:{
                wx:14
            }
        })
       const S =  watchEffect(()=>{
            const a = p1.value
            const b = p2.value
            console.log('进入页面我就执行')
        })
        S()//停止监听
        return {p1,p2,p3}
    },

9.watch侦听器

  • 与vue2一致,均是用来侦听数据变化的
  • 使用需引入
import { watch } from 'vue'
setup() {
        const p1 = ref(0)
        const p2 = ref(1)
        const p3 = reactive({
            name:'林一',
            age:50,
            product:{
                wx:14
            }
        })
        // 一:侦听ref的基本数据
        // watch(p1,(newVal,oldVal)=>{
        //     console.log(newVal,oldVal)
        // },{immediate:true})//{immediate:true}立即侦听

        // 二:侦听多个ref响应数据
        // watch([p1,p2],(newVal,oldVal)=>{
        //     console.log(newVal,oldVal)
        // })

        // 三:侦听整个reactive定义的数据:只能监听到最新的结果,之前的结果监听不到
        // watch(p3,(newVal,oldVal)=>{
        //     console.log(newVal,oldVal)
        // })

        // 四:侦听reactive定义的数据中的某一个值:可以监听到,无论层级有多深
        watch(()=>p3.product.wx,(newVal,oldVal)=>{
            console.log(newVal,oldVal)
        })
        return {p1,p2,p3}
    },

10.computed

  • 与vue2一致,均是用来监听数据变化
  • 使用需引入
import { computed } from 'vue'
setup() {

    const mayun = ''
    const huateng = ''
    const res = reactive({linyi,liner})

    // 计算年龄总和
    const sum = computed({
        get(){
            return res.linyi + res.liner
        },
        set(val){
            console.log(val)
        }
    })

    return {...toRefs(res),sum}
}

11.reactive介绍

  • reactive同样为我们的值创建了一个响应式引用
  • 定义基本普通类型数据不能用reactive,用ref
  • reactive主要定义复杂数据类型,比如数组,对象
  • reactive可响应深层次的数据,比如多维数组
  • reactive返回一个响应式的proxy对象
  • 使用需引入
import { reactive } from 'vue'
reactive({name:'林一'})
setup(){
    //  const name = reactive({name:'林一'})
    //  const age = reactive({age:20})
    //  const company = reactive({company:'阿里巴巴'})
    // //  深层次响应式
    //  const pro = reactive({
    //      a:'淘宝',
    //      b:'天猫',
    //      c:{
    //          d:'京东',
    //          e:'顺丰'
    //      }
    //  })
     const btn = ()=>{
    //    name.name = '林二'
    //    age.age = 40
    //    pro.c.d = '京东0000'
          res.name = '林三'
     }
    // 共用一个reactive
    const name = '林四'
    const age = 52
    const company = '阿里巴巴'
    const res = reactive({name,age,company})

     return {res,btn}
 }

12.toRefs介绍

  • 用于批量设置多个数据为响应式数据
  • toRefs与原始数据有交互,修改响应式数据会影响到原数据,但是不会更新视图层
  • toRefs还可以与其他响应式函数交互,更加方便处理视图层数据
  • 使用需引入
import {toRefs} from 'vue'
toRefs(obj)
setup(){
    const obj = {name:'林一',age:40}
    const refs = reactive(obj)
    // const res = toRefs(refs)
     const btn = ()=>{
        //  res.name.value = '林三'
        //  console.log(res)
         console.log(refs)
         refs.name = '林二'
         console.log(refs)
         console.log(obj)
     }
     return {...toRefs(refs),btn}
 }

到此这篇关于vue3.0组合式api的使用小结的文章就介绍到这了,更多相关vue3组合式api使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue3中的组合式 API示例详解

    目录 为什么要有组合式 API? 更好的逻辑复用 更灵活的代码组织 更好的类型推导 生产包体积更小 与选项式 API 的关系 组合式 API 是否覆盖了所有场景? 可以同时使用两种 API 吗? 选项式 API 会被废弃吗? 组合式 API 是一系列 API 的集合,使我们可以使用函数而不是声明选项的方式书写 Vue 组件.它是一个概括性的术语,涵盖了以下方面的 API: 响应性 API:例如ref()和reactive(),使我们可以直接创建响应式状态.计算属性和侦听器. 生命周期钩子:例如o

  • WebStorm无法正确识别Vue3组合式API的解决方案

    1 问题描述 Vue3的组合式API无法在WebStorm中正确识别,表现为defineComponent等无法被识别: 2 尝试方案 猜想这种问题的原因是无法正确识别对应的Vue3库,笔者相信WebStorm是可以做到的,只是某些配置没有正确,笔者尝试过在设置的Libraries中勾选上node_modules,但是没有效果. 3 解决办法 最终的解决办法参考了此处(图源): 选择node_modules文件夹,右键选择Mark Directory as,最后选择Not Excluded即可.

  • 浅谈vue2的$refs在vue3组合式API中的替代方法

    如果你有过vue2的项目开发经验,那么对$refs就很熟悉了.由于vue3的断崖式的升级,在vue3中如何使用$refs呢?想必有遇到过类似的问题,我也有一样的疑惑.通过搜索引擎和github,基本掌握如何使用$refs.在vue3中使用组合式API的函数ref来代替静态或者动态html元素的应用. 最近业余在学习vue3项目<蜡笔(Crayon)管理模板:Vue3 + Vuex4 + Ant Design2>开发,这两天迭代推进了一点,实现了chart图表组件,写文章的时候发现提交代码的co

  • vue-class-setup 编写 class 风格组合式API

    目录 前言 诞生想法 快速开始 最佳实践 多个类实例 PassOnTo Watch defineExpose 为什么使用 class ? 最后 前言 我司基于vue-class-component开发的项目有上百个,其中部署的 SSR 服务也接近100个,如此庞大体量的项目一开始的时候还幻想着看看是否要升级Vue3,结果调研一番下来,才发现vue-class-component对Vue3的支持,最后一个版本发布都过去两年了,迟迟还没有发布正式版本.目前基本上处于无人维护的状态,而且升级存在着大量

  • vue3.0组合式api的使用小结

    目录 1.setup使用 2.生命周期函数 3.vuex 4.toRef介绍 5.ref介绍 6.组件传值 7.shallowRef和shallowReactive 8.watchEffect 9.watch侦听器 10.computed 11.reactive介绍 12.toRefs介绍 vue2开发缺点和vue3开发优点 vue2代码冗余,杂乱 vue3则可以把相关的功能代码抽离分割在一起,方便开发者快速阅读 1.setup使用 setup函数是 Composition API(组合API)

  • 浅谈Vue3.0新版API之composition-api入坑指南

    关于VUE3.0 由于vue3.0语法跟vue2.x的语法几乎是完全兼容的,本文主要介绍了如何使用composition-api,主要分以下几个方面来讲 使用vite体验vue3.0 composition-api解决了什么问题 语法糖介绍 vite的安装使用 vite仓库地址 https://github.com/vuejs/vite 上面有详细的安装使用教程,按照步骤安装即可 composition-api解决了什么问题 使用传统的option配置方法写组件的时候问题,随着业务复杂度越来越高

  • 精读《Vue3.0 Function API》

    1. 引言 Vue 3.0 的发布引起了轩然大波,让我们解读下它的 function api RFC详细了解一下 Vue 团队是怎么想的吧! 首先官方回答了几个最受关注的问题: Vue 3.0 是否有 break change,就像 Python 3 / Angular 2 一样? 不,100% 兼容 Vue 2.0,且暂未打算废弃任何 API(未来也不).之前有草案试图这么做,但由于用户反馈太猛,被撤回了. Vue 3.0 的设计盖棺定论了吗? 没有呀,这次精读的稿子就是 RFC(Reques

  • 详解vue3.0 的 Composition API 的一种使用方法

    网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 Composition API 的用法,具体问题才好具体讨论嘛. 假如我们要做一个论坛的讨论列表和分页,以前是把需要的数据都放在data里面,事件都放在methods 里面,代码少的话还好分辨,如果代码多了,看着就头疼了. 现在vue3.0可以按照业务关系分成多个管理类来管理这些代码. 比如帖子列表+发帖功能,我们先做一个模板: (简单表示一下,不做美化处理了) <template> <div> 论坛列表 <div v

  • vue3.0中setup的两种用法实例

    目录 前言 一.setup函数的特性以及作用 二.setup函数的注意点: 用法1:结合ref使用 用法2:代码分割 总结 前言 这篇文章主要介绍了vue3.0中setup使用,本文通过两种用法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 什么是setup setup是vue3新增的生命周期函数,setup的加入就是为了让vue3使用组合式API(Composition API).使用组合式API更符合大型项目的开发,通过setup可以将该部分抽离成函数,

  • 15分钟上手vue3.0(小结)

    Vue 3 还没有正式发布,但是 Alpha 版本已经发布了. 虽然官方还不推荐在生产环境中直接使用 Vue 3 ,但是提前学习总归是有好处的. 嘴上喊着老子学不动了,双手还是很诚实的打开了 Vue 3 文档 创建项目 Vue 官方很贴心的提供了一个 github 仓库,让我们能快速体验Vue 3的新特性: git clone https://github.com/vuejs/vue-next-webpack-preview.git vue3-start cd vue3-start npm in

  • vue3.0 的 Composition API 的使用示例

    网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 Composition API 的用法,具体问题才好具体讨论嘛. 假如我们要做一个论坛的讨论列表和分页,以前是把需要的数据都放在data里面,事件都放在methods 里面,代码少的话还好分辨,如果代码多了,看着就头疼了. 现在vue3.0可以按照业务关系分成多个管理类来管理这些代码. 比如帖子列表+发帖功能,我们先做一个模板: (简单表示一下,不做美化处理了) <template> <div> 论坛列表 <div v

随机推荐