Vue.js 比较重要知识点总结二

news/2024/10/18 18:14:25/

概述

  • vue3 组合式API生命周期钩子函数有变化吗?
  • Composition API 与 Options API 有什么区别?
  • watch 和 watchEffect 的区别?
  • vue2 如何升级到 vue3 ?

vue3 组合式API生命周期钩子函数有变化吗?

选项式API 和 组合式API 生命周期钩子对比:

setup 是围绕 beforeCreate 和 created 生命周期钩子运行的,所以不需要显示的定义它们。其他的钩子都可以编写到 setup内。

值得注意的是组合式API中的钩子函数,通过在生命周期钩子前面加上 “on” 来访问组件的生命周期钩子,需要注册,并且只能在setup 期间同步使用,因为它们依赖于内部的全局状态来定位当前组件实例。

import { onMounted } from "vue"
export default {setup() {  // mountedonMounted(() => {   console.log('Component is mounted!')})}
}

更多精彩内容,请微信搜索“前端爱好者戳我 查看

Composition API 与 Options API 有什么区别?

Options API 是啥?

vue2 中我们把一个 vue 文件中 data、methods、props、mounted、computed 等定义属性和方法,共同处理页面逻辑,这种方式叫做 Options API。

这种方式开发的复杂组件,同一个功能的往往需要在不同 vue 配置项中定义属性和方法,代码比较分散。如果功能比较复杂,维护代码的时候往往会很难分清每个方法对应的功能,增加了代码维护成本。所以 vue3 舍弃了 Options API ,换用 Composition API。

Composition API 是啥?

Composition API 是 vue3 新增的,所以 vue2 没有。

在 Composition API 中,根据代码逻辑功能来组织的,一个功能所定义的所有 API 都会放到一起,这样即使功能复杂,代码量增大,都可以一下子定位到某个功能的所有代码,代码维护方便。

它的最大特点就是:高内聚,低耦合

vue3 仍然支持 options API,但我们更推荐使用 Composition API。

优劣比较:

  • 更好的可编程性。
  • 更优的代码组织。
  • 更好的逻辑抽象能力。
  • 对 tree-shaking 友好,代码也更容易压缩。
  • 没有 this ,没烦恼。

如何使用 Composition API 和 Options API

  • Composition API 更好的代码组织,更好的逻辑复用,更好的类型推到
  • 小型项目,业务逻辑简单,用Options API
  • 中大型项目,业务逻辑复杂的,用Composition API
  • Composition API 是为了解决复杂业务逻辑而设计的
  • Composition API 类似React Hooks

watch 和 watchEffect 的区别?

它们之间的相同点有:

  • watch 和 watchEffect 都是监听器,watchEffect 是一个副作用函数。
  • watch 与 watchEffect 在手动停止侦听、清除副作用 (将 onInvalidate 作为第三个参数传递给回调)、刷新时机和调试方面有相同的行为。

它们之间的区别有:

  • watch 需要传入监听的数据源,而 watchEffect 可以自动手机数据源作为依赖。
  • watch 可以访问倒改变之前和之后的值,watchEffect 只能获取改变后的值。
  • watch 运行的时候不会立即执行,值改变后才会执行,而 watchEffect 运行后可立即执行。这一点可以通过 watch 的配置项 immediate 改变。
const numberRef = ref(100)
const state = reactive({name: 'test',age: 20
})

watch:

watch(numberRef, (newNumber, oldNumber) => {console.log('ref watch', newNumber, oldNumber)}, {immediate: true // 初始化之前就监听,可选}
)setTimeout(() => {numberRef.value = 200
}, 1500)watch(// 第一个参数,确定要监听哪个属性() => state.age,// 第二个参数,回调函数(newAge, oldAge) => {console.log('state watch', newAge, oldAge)},// 第三个参数,配置项{immediate: true, // 初始化之前就监听,可选// deep: true // 深度监听}
)setTimeout(() => {state.age = 25
}, 1500)
setTimeout(() => {state.name = 'testA'
}, 3000)

watchEffect:

watchEffect(() => {// 初始化时,一定会执行一次(收集要监听的数据)console.log('hello watchEffect')
})
watchEffect(() => {// 监听的是state.name 不会监听state.ageconsole.log('state.name', state.name)
})
watchEffect(() => {console.log('state.age', state.age)
})
watchEffect(() => {console.log('state.age', state.age)console.log('state.name', state.name)
})
setTimeout(() => {state.age = 25
}, 1500)
setTimeout(() => {state.name = 'test1'
}, 3000)

vue2 如何升级到 vue3 ?

如果是把之前的 vue2 项目升级到 vue3 ,先卸载旧版本的 vue-cli,安装最新版本。安装完成之后,检查 vue 的版本。

然后需要注意,把项目中 vue3 发生改变或被废弃的特性需要进行修改。

如:

  • $children 被 vue3 移除,使用 $children 的需要替换为 $ref。
  • filters 被移除,更改为 computed 。
  • $destory 被移除,需要删除掉。
  • 插槽的新变化。
  • Vuex 使用发生改变。
  • vue-router 使用发生改变等等。

可以自行在官网查看升级指南。地址如图

地址:https://v3-migration.vuejs.org/zh/

参考地址:

  • https://tangjiusheng.com/web/4935.html
  • https://blog.csdn.net/weixin_41759744/article/details/125305021

http://www.ppmy.cn/news/157558.html

相关文章

Coursera自动驾驶2.3-2.4——传感器:IMU,GNSS,LiDAR

文章目录 一、3D几何和参考系1.旋转变换2.参考系 二、惯性测量单元1.陀螺仪2.加速计 三、全球导航卫星系统(GNSS)四、激光雷达1.激光雷达和测量模型(1)激光雷达概述(2)测量模型 2.点云3.平面拟合4.点云匹配…

如何将Chrome浏览器重置为默认设置?

如何将Chrome浏览器重置为默认设置? 将 Chrome 设置重置为默认设置 您可随时在 Chrome 中恢复您的浏览器设置。如果所安装的应用或扩展程序在您不知情的情况下更改了设置,那么您可能需要这样做。不过,您保存的书签和密码不会被清除或更改。 …

JavaEE Servlet的API详解

Servlet的API详解O(∩_∩)O~: 文章目录 JavaEE & Servlet的API详解1. HttpServlet抽象类1.1 init方法1.2 destroy方法1.3 service方法 2. HttpRequest接口2.1 在浏览器上显示请求首行2.2 在浏览器上显示请求header2.3 getParameter方法 - 最常用的API之一2.4 js…

《最高人民法院 最高人民检察院 公安部关于办理电信网络诈骗等刑事案件适用法律若干问题的意见(二)》

法发〔2021〕22号 最高人民法院 最高人民检察院 公安部 关于办理电信网络诈骗等刑事案件适用法律若干问题的意见(二) 为进一步依法严厉惩治电信网络诈骗犯罪,对其上下游关联犯罪实行全链条、全方位打击,根据《中华人民共和国刑法…

Selenium 页面加载策略

共有三种类型的页面加载策略. 页面加载策略可以在此链接查询 document.readyState , 如下表所述: 策略就绪状态备注normalcomplete默认值, 等待所有资源下载eagerinteractiveDOM 访问已准备就绪, 但诸如图像的其他资源可能仍在加载noneAny完全不会阻塞 WebDriver 文档的 docu…

C++基础编程

1 C初识 1.1 第一个C程序 #include<iostream> using namespace std;int main() {cout << "Hello world" << endl;system("pause");return 0; }1.2 注释 作用&#xff1a;在代码中加一些说明和解释&#xff0c;方便自己或其他程序员程…

设计模式第二天(创建型模式)

1.抽象工厂设计模式 定义了一个接口用于创建相关或有依赖关系的对象族&#xff0c;而无需明确指定具体类public interface AbsFactory{Pizza createPizza(String ordertype) }public class LDFactory implement AbsFactory{Overrriedpublic createPizza(String orderType){Piz…

【STM32H7】第8章 学习USB协议栈前要了解的基础知识

论坛原始地址&#xff08;持续更新&#xff09;&#xff1a;http://www.armbbs.cn/forum.php?modviewthread&tid99710 第8章 学习USB协议栈前要了解的基础知识 本章节为大家讲解USB基础知识点&#xff0c;学习USB前&#xff0c;非常有必要有个系统的认识。 目录 第8…