【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封装的),而非普通对象

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

相关推荐
sensen_kiss1 分钟前
CPT304 SoftwareEngineeringII 软件工程 2 Pt.9 软件测试 (Software Testing)(下)
学习·软件工程
老王以为3 分钟前
Claude Code 的产品哲学:当价值观成为架构
前端·claude·vibecoding
程序员黑豆7 分钟前
AI全栈开发 - Java:变量
java·前端·ai编程
wu_ye_m10 分钟前
学习c语言第35天 函数声明和定义
c语言·开发语言·学习
tedcloud12310 分钟前
HyperFrames部署教程:用HTML生成MP4视频
前端·数据库·人工智能·html·音视频
江米小枣tonylua17 分钟前
真多线程!Bun作者要给JS大手术
前端
数据知道19 分钟前
视觉伪装(下):WebGL 渲染器与厂商特征的底层伪造与屏蔽
javascript·数据采集·webgl·指纹浏览器
清辞85324 分钟前
Coze从入门到实战---第一、二章
大数据·人工智能·学习·语言模型
东风破_35 分钟前
JS 数据类型:从八种分类到栈与堆的内存真相
javascript
YIAN36 分钟前
# 从入门到封装:一文搞懂 Fetch API 所有用法(新手友好)
前端·javascript