vue3.0学习笔记(二)——生命周期与响应式数据(ref,reactive,toRef,toRefs函数)

1. 组合API-setup函数

使用细节:

  • setup 是一个新的组件选项,作为组件中使用组合API的起点。
  • 从组件生命周期来看,它的执行在组件实例创建之前vue2.x的beforeCreate执行
  • 这就意味着在setup函数中 this 还不是组件实例,this 此时是 undefined
  • 在模版中需要使用的数据和函数,需要在 setup 返回(return)。

2. 生命周期

2.1 回顾vue2.x生命周期钩子函数

  • beforeCreate
  • created------实例创建,能获取data, 不能获取真实DOM,一般用于发起Ajax请求
  • beforeMount
  • mounted------可以获取真实DOM
  • beforeUpdate
  • updated------当数据发生变化并更新页面后执行,获取更新后的DOM
  • beforeDestroy
  • destroyed------手动消除计时器/定时器/全局事件

2.2 认识vue3.0生命周期钩子函数

  • setup 创建实例前
  • onBeforeMount 挂载DOM前
  • onMounted 挂载DOM后
  • onBeforeUpdate 更新组件前
  • onUpdated 更新组件后
  • onBeforeUnmount 卸载销毁前
  • onUnmounted 卸载销毁后

总结: 组合API的生命周期钩子有7个,可以多次使用同一个钩子,执行顺序和书写顺序相同。

3. ref() 函数

  • 作用:接收简单类型或者对象类型的数据传入并返回一个响应式的对象(RefImpl)

定义响应式数据:

  • ref函数,常用于简单数据类型定义为响应式数据
    • 再修改值,获取值的时候,需要**.value**
    • 在模板中使用ref申明的响应式数据,可以省略.value

语法:

  • 从 vue 包中导入 ref 函数 import { ref } from 'vue'

  • 在 setup 中执行 ref 函数并传入初始值,使用变量接收 ref 函数的返回值

使用场景:

  • 当你明确知道需要的是一个响应式数据对象,那么就使用 reactive 即可
  • 其他情况使用ref

4. reactive() 函数

  • **作用:**接受对象类型数据的参数传入并返回一个响应式的对象。 响应式对象是 JavaScript 代理,其行为就和普通对象一样。(Proxyreactive() 返回的是一个原始对象的 Proxy,它和原始对象是不相等的。

  • 定义响应式数据:

    • reactive是一个函数,它可以定义一个复杂数据类型,成为响应式数据。
    • 通常是用来定义响应式对象数据

语法:

  • 从 vue 包中导入 ref 函数 import { reactive } from 'vue'

  • 在 setup 中执行 reactive 函数并传入初始值,使用变量接收 reactive 函数的返回值

5. ref()与reactive()函数的理解

  • reactive和ref函数的共同作用是什么 ?
    • 用函数调用的方式生成响应式数据
  • reactive vs ref
    • reactive不能处理简单类型的数据
    • ref参数类型支持更好但是必须通过.value访问修改
    • ref函数的内部实现依赖于reactive函数
  • 在实际工作中推荐使用哪个?
    • 推荐使用ref函数,更加灵活统一

理解:

ref 和 reactvie 都是生成响应式数据的方法。ref 可以用于简单类型的数据和复杂类型的数据,生成的是响应式对象(RefImpl);而 reactive 只能用于对象,且生成的代理响应式对象(Proxy)。通过 ref 生成的响应式对象(RefImpl).value之后的值,其实就是通过 reactive 生成的代理响应式对象(Proxy)。

推荐:以后申明数据,统一使用 ref => 统一了编码规范

6. toRef() 函数

  • 作用:toRef 是函数,转换响应式对象某个 属性为单独响应式数据,并且值是关联的

  • 语法:

    • 从 vue 包中导入 toRef 函数 import { toRef } from 'vue'

    • toRef (响应式对象, 响应式对象中的某个属性)

使用场景:有一个响应式对象数据,但是模版中只需要使用其中一项数据。

7. toRefs() 函数

  • 作用:toRefs() 是函数,转换响应式对象 中所有属性为单独响应式数据,并且值是关联的。
  • 语法:
    • 从 vue 包中导入 toRefs 函数 import { toRefs } from 'vue'
    • toRefs (响应式对象)

8. 案例

基本步骤:

  • 记录鼠标坐标
    • 定义一个响应式数据对象,包含x和y属性。
    • 在组件渲染完毕后,监听document的鼠标移动事件
    • 指定move函数为事件对应方法,在函数中修改坐标
    • 在setup返回数据,模版中使用
  • 累加1功能
    • 定义一个简单数据类型的响应式数据
    • 定义一个修改数字的方法
    • 在setup返回数据和函数,模板中使用
javascript 复制代码
<template>
  <div>
    <div>鼠标的坐标为:</div>
    <p>x:{{ x }}</p>
    <p>y:{{ y }}</p>
    <hr>
    <div>{{ count }}</div>
    <button @click="add">+ 1</button>
  </div>
</template>

<script>
import { onMounted, reactive, onUnmounted, toRefs, ref } from 'vue'
// 功能1:记录鼠标坐标
// 定义一个响应式数据对象,包含x和y属性。
// 在组件渲染完毕后,监听document的鼠标移动事件
// 指定move函数为事件对应方法,在函数中修改坐标
// 在setup返回数据,模版中使用

export default {
  setup () {
    // 1. 定义一个响应式数据对象,包含x和y属性。
    const mouse = reactive({
      x: 0,
      y: 0
    })
    // 3. 指定move函数为事件对应方法,在函数中修改坐标
    const move = (e) => { 
        mouse.x = e.pageX
        mouse.y = e.pageY
      }
    // 2. 在组件渲染完毕后,监听document的鼠标移动事件
    onMounted(() => {
      document.addEventListener('mousemove',move)
    })
    //  4. 组件销毁时,移除事件
    onUnmounted(() => {
      document.removeEventListener('mousemove',move)
    })

    // 功能2:数字加 1 
    const count = ref(0)
    const add = () => {
      count.value += 1
    }
    return {
      ...toRefs(mouse),
      count,
      add
    }
  }
}
</script>

<style>

</style>
相关推荐
云上艺旅7 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
ElasticPDF-新国产PDF编辑器8 小时前
Vue use pdf.js and Elasticpdf tutorial
vue.js·pdf
你觉得2058 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
A旧城以西9 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
无所谓จุ๊บ9 小时前
VTK知识学习(50)- 交互与Widget(一)
学习·vtk
FAREWELL000759 小时前
C#核心学习(七)面向对象--封装(6)C#中的拓展方法与运算符重载: 让代码更“聪明”的魔法
学习·c#·面向对象·运算符重载·oop·拓展方法
Billy Qin9 小时前
Tree - Shaking
前端·javascript·vue.js
月明长歌9 小时前
Vue + Axios + Mock.js 全链路实操:从封装到数据模拟的深度解析
前端·javascript·vue.js·elementui·es6
吴梓穆9 小时前
UE5学习笔记 FPS游戏制作38 继承标准UI
笔记·学习·ue5
头顶秃成一缕光10 小时前
若依——基于AI+若依框架的实战项目(实战篇(下))
java·前端·vue.js·elementui·aigc