【Vue3】vue3的全面学习(一)

1、vue3和vue2相比有什么优势?

(1)性能更好

(2)体积更小

(3)更好的 ts 支持

(4)更好的代码组织

(5)更好的逻辑抽离

(6)更多新功能

2、vue3的生命周期

javascript 复制代码
//Options API 的生命周期
  beforeCreate() {
    console.log('beforeCreate');
  },
  created() {
    console.log('created');
  },
  beforeMount() {
    console.log('beforeMount');
  },
  mounted() {
    console.log('mounted');
  },
  beforeUpdate() {
    console.log('beforeUpdate');
  },
  updated() {
    console.log('updated');
  },
  //beforeDestroy和destroyed已经被废弃改成了beforeUnmount和unmounted
  beforeUnmount() {
    console.log('beforeUnmount');
  },
  unmounted() {
    console.log('unmounted');
  },
javascript 复制代码
//Composition API 的生命周期
//setup 相当于 beforeCreate 和 created
  setup() {
    console.log('setup');
    onBeforeMount(() => {
      console.log('onBeforeMount');
    });
    onMounted(() => {
      console.log('onMounted');
    });
    onBeforeUpdate(() => {
      console.log('onBeforeUpdate');
    });
    onUpdated(() => {
      console.log('onUpdated');
    });
    onBeforeUnmount(() => {
      console.log('onBeforeUnmount');
    });
    onUnmounted(() => {
      console.log('onUnmounted');
    });
  },

3、Composition API 和 Options API 的对比

(1)、Composition API 带来了什么?

更好的代码组织、更好的逻辑复用、更好的类型推导

(2)、Composition API 和 Option API 如何选择?

不建议共用,会引起混乱

小型项目、业务逻辑简单,用Options API

中大型项目、逻辑复杂,用 Composition API

4、如何理解 ref toRef 和 toRefs

(1)ref

生成值类型的响应式数据

可用于模板和reactive

通过 .value 修改值

命名最好以 ***Ref 方式,增加代码可读性

javascript 复制代码
//ref 用于模板、reactive 不需要写 .value,其余情况都需要
    <div>{{ msgRef }}{{ state.age }}</div>
//script
    const msgRef = ref('hello world');
    const state = reactive({
      name: msgRef,
      age: 18,
    });
    setTimeout(() => {
      state.age = 20;
      msgRef.value = 'hello world2';
    }, 1000);
//获取元素节点
<div ref="divRef">123</div>
const divRef = ref(null);

(2)toRef

针对一个响应式对象(reactive 封装)的属性

创建一个 ref,具有响应式

两者保持引用关系

javascript 复制代码
    const personObj = reactive({
      age: 18,
      name: '小美'
    })
//toRef 针对响应式对象的某个属性实现响应式
    const ageRef = toRef(personObj, 'age')
    setTimeout(() => {
      ageRef.value = 20
    }, 1500);

(3)toRefs

将响应式对象(reactive封装)转换为普通对象

对象的每一个属性都是对应的ref

两者保持引用关系

javascript 复制代码
const personObj = reactive({
      age: 18,
      name: '小美',
      state:{
        sex: 'male',
        address: '北京'
      }
    })
//toRefs将响应式的对象,拆成响应式的 ref,并相互作用
const {age, name, state} = toRefs(personObj)

5、进阶,深入理解 ref toRefs toRefs

1、为何需要 ref?

返回值类型,会丢失响应式,如在 setup、computed、合成函数、都有可能返回值类型。Vue如不定义 ref,用户将自造 ref,反而混乱
2、为何需要 .value ?

ref是一个对象(不丢失响应式),value存储值

通过 .value 属性的get 和 set 实现响应式

用于模板、reactive 时,不需要 .value,其他情况都需要
3、为什么需要toRef 和 toRefs ?

初衷:不丢失响应式的情况下,把对象数据 分解/扩散

前提:针对的是响应式对象(reactive封装的),而非普通对象

注意:不创造响应式,而是延续响应式

相关推荐
andrsted4 小时前
用练题簿小程序 - 让错题不再白错
学习·微信小程序·小程序·学习方法
2601_949950634 小时前
练题簿,把培训从“走过场”变成“真落地”
人工智能·学习·小程序·刷题·小程序推荐
问天_观心7 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
梦曦i7 小时前
@meng-xi/create-uni-app vs unibest:轻量脚手架与重型框架的定位之争
前端·uni-app
指掀涛澜天下惊7 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
平头哥技术团队7 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
star learning white7 小时前
STM32入门学习5
stm32·嵌入式硬件·学习
传奇开心果编程8 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
乌恩大侠8 小时前
GH200 新增 NVMe SSD 分区、格式化与挂载完整流程
运维·服务器·前端
yume_sibai8 小时前
Element Plus 数据展示组件完全指南(15个核心组件)
前端·javascript·vue.js