vue3常用API之学习笔记

目录

一、setup函数

vue2与vue3变量区别

二、生命周期

三、reactive方法

四、ref方法

1、简介

2、使用

3、ref与reactive

4、获取标签元素或组件

五、toRef

1、简介

2、ref与toRef的区别

六、toRefs

七、shallowReactive 浅reactive

1、简介

2、shallowreactived的浅reactive

八、shallowRef

1、简介

2、triggerRef

九、toRaw方法

十、markRaw

十一、provide && inject

1、简介

2、代码实例

十二、watch && watchEffect

1、watch 简介

2、watchEffect与 watch 的区别

十三、getCurrentInstance

1、输出值ctx

2、输出值proxy

十四、useStore


一、setup函数



vue2与vue3变量区别

1、vue2访问data或props中的变量,需要通过this

2、vue3的setup函数有两个参数,分别是props、context

(1)props:存储定义当前组件允许外界传递来的参数名及参数值

(2)context:上下文对象,能从中访问到attr、emit、slots

        【emit就是vue2中父组件通信的方法,可以直接拿来调用】


二、生命周期

Vue2

Vue3

beforeCreate

setup

created

setup

beforeMount

onBeforeMount

mounted

onMounted

beforeUpdate

onBeforeUpdate

updated

onUpdated

beforeDestory

onBeforeUnmount

destoryed

onUnmounted

vue3生命周期的使用,也是先从vue中导入,再进行直接调用




三、reactive方法

用来创建一个响应式数据对象,该API也很好地解决了Vue2通过 defineProperty 实现数据响应式的缺陷




四、ref方法

1、简介

包装了一个响应式的数据对象,ref是通过 reactive 包装了一个对象,然后是将值传给该对象中的 value 属性

注意:.value是在访问ref方法才需要,在template模板是不需要的

2、使用

可以简单地把 ref(obj) 理解为这个样子 reactive({value: obj})

vue3常用API之学习笔记_第1张图片

3、ref与reactive

(1)基本类型值(string、number、boolean等)或单值对象(像{count:3}只有一个属性值的)使用ref

(2)引用类型值(object、array)使用reactive

4、获取标签元素或组件

(1)在Vue2中,我们获取元素都是通过给元素一个 ref 属性,然后通过 this.$refs.xx 来访问的,在Vue3中已经不再适用

(2)vue3获取元素如下


(3)获取元素的操作步骤:

vue3常用API之学习笔记_第2张图片

补充:设置的元素引用变量只有在组件挂载后才能访问到,因此在挂载前对元素进行操作都是无效的


五、toRef

1、简介

某对象中的某值转化为响应式数据,其接收两个参数

(1)第一个参数为 obj 对象

(2)第二个参数为对象中的属性名



2、ref与toRef的区别

上面的例子ref也可以实现,那为什么还要toRef呢,来看看他们的区别吧



vue3常用API之学习笔记_第3张图片

(1)ref是对传入数据的拷贝;toRef是对传入数据的引用

(2)ref值会改变更新视图;toRef值改变不会更新视图


六、toRefs

将传入的对象里所有的属性的值都转化为响应式数据对象,该函数支持一个参数,即 obj 对象




七、shallowReactive 浅reactive

1、简介

shallowReactive传递给reactive的obj对象不止一层,那么每一次都会用Proxy包装



vue3常用API之学习笔记_第4张图片

如果一个对象层级比较深,那么每一层都用 Proxy 包装后,对于性能是非常不友好的

2、shallowreactived的浅reactive

shallowreactive只有第一层被Proxy处理了,即只有修改第一层的值,才会响应式更新



vue3常用API之学习笔记_第5张图片


八、shallowRef

1、简介

浅层ref,一样是用来做性能优化的

(1)shallowReactive 是监听对象第一层的数据变化用于驱动视图更新

(2)shallowRef 则是监听 .value 的值的变化来更新视图的

(3)代码实例



vue3常用API之学习笔记_第6张图片

①第二个按钮点击数据改变但是视图没变

②第一个按钮将整个 .value 重新赋值,视图才更新

2、triggerRef

triggerRef可以解决上面实例的第二个按钮的问题,可以立马更新视图,其接收一个参数 state ,即需要更新的 ref 对象



vue3常用API之学习笔记_第7张图片


九、toRaw方法

toRaw 方法是用于获取 ref 或 reactive 对象的原始数据



vue3常用API之学习笔记_第8张图片

上述代码就证明了 toRaw 方法从 reactive 对象中获取到的是原始数据,因此我们就可以很方便的通过修改原始数据的值而不更新视图来做一些性能优化了

注意: 补充一句,当 toRaw 方法接收的参数是 ref 对象时,需要加上 .value 才能获取到原始数据对象


十、markRaw

markRaw 方法可以将原始数据标记为非响应式的,即使用 ref 或 reactive 将其包装,仍无法实现数据响应式,其接收一个参数,即原始数据,并返回被标记后的数据



被 markRaw 方法处理过后的数据不能被 reactive 包装成响应式数据,修改了值也不会更新视图了,即没有实现数据响应式


十一、provide && inject

1、简介

  • provide :向子组件以及子孙组件传递数据。接收两个参数,第一个参数是 key,即数据的名称;第二个参数为 value,即数据的值
  • inject :接收父组件或祖先组件传递过来的数据。接收一个参数 key,即父组件或祖先组件传递的数据名称

2、代码实例

假设这有三个组件,分别是 A.vue 、B.vue 、C.vue,其中 B.vue 是 A.vue 的子组件,C.vue 是 B.vue 的子组件

// A.vue


// B.vue


// C.vue

十二、watch && watchEffect

watch 和 watchEffect 都是用来监视某项数据变化从而执行指定的操作的,但用法上还是有所区别

1、watch 简介

watch 格式:watch( source, cb, [options])

  • source:可以是表达式或函数,用于指定监听的依赖对象
  • cb:依赖对象变化后执行的回调函数
  • options:可参数,可以配置的属性有 immediate(立即触发回调函数)、deep(深度监听)

(1)监听ref类型时:

(2)监听reactive类型时:

(3)当同时监听多个值时:

(4)因为 watch 方法的第一个参数我们已经指定了监听的对象,因此当组件初始化时,不会执行第二个参数中的回调函数,若我们想让其初始化时就先执行一遍,可以在第三个参数对象中设置 immediate: true

(5)watch 方法默认是渐层的监听我们指定的数据,例如如果监听的数据有多层嵌套,深层的数据变化不会触发监听的回调,若我们想要其对深层数据也进行监听,可以在第三个参数对象中设置 deep: true

(6)watch方法会返回一个stop方法,若想要停止监听,便可直接执行该stop函数

2、watchEffect与 watch 的区别

(1)不需要手动传入依赖

(2)每次初始化时会执行一次回调函数来自动获取依赖

(3)无法获取到原值,只能得到变化后的值

没有像 watch 方法一样先给其传入一个依赖,而是直接指定了一个回调函数

当组件初始化时,该回调函数会执行一次,自动获取到需要检测的数据


十三、getCurrentInstance


1、输出值ctx

vue3常用API之学习笔记_第9张图片

2、输出值proxy

vue3常用API之学习笔记_第10张图片

ctx 和 proxy 的内容十分类似,只是后者相对于前者外部包装了一层 proxy,由此可说明 proxy 是响应式的


十四、useStore

通过vuex中的useStore方法

// store 文件夹下的 index.js
import Vuex from 'vuex'

const store = Vuex.createStore({
    state: {
        name: '前端印象',
        age: 22
    },
    mutations: {
        ……
    },
    ……
})

// example.vue

你可能感兴趣的:(vue3,自学,学习,笔记,vue.js,vue3,前端)