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

数字寻梦人
• 阅读 701

概述

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

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

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

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

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

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

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

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

Composition API 与 Options API 有什么区别?

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

Options API 是啥?

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

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

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

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

Composition API 是啥?

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

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

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

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

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

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

优劣比较:

  • 更好的可编程性。
  • 更优的代码组织。
  • 更好的逻辑抽象能力。
  • 对 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.age
    console.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 使用发生改变等等。

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

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

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

参考地址:

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

点赞
收藏
评论区
推荐文章
Souleigh ✨ Souleigh ✨
4年前
Vue3 的 15 个常用 API
来自公众号:前端印象本文会频繁地对比Vue2来介绍Vue3,也将对各个API结合代码实例讲解,这既是对自己知识的总结,也希望能帮助到大家一、前言大家都知道,现在Vue3的各个版本已经陆续发布了,并且有很多的团队已经着手各个库的开发与Vue2向Vue3的升级,我们当然也不能落后,所以赶紧将你手中的Vue2升级到Vue3,跟着本文一起学
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
LinMeng LinMeng
4年前
vue的watch监听
vue的watch监听函数watch用来响应数据的变化,watch的用法大致有以下三种:1.监听某个变量watch:{name(newName,oldName){console.log(newName)//改变前的值console.log(oldName)//改变后的值
马丁路德 马丁路德
4年前
Vue和微信小程序的区别
_写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别。_一、生命周期先贴两张图:vue生命周期小程序生命周期相比之下,小程序的钩子函数要简单得多。vue的钩子函数在跳转新页面时,钩子函数都会触发,但是小程序的钩子函数,页面不同的跳转方式,触发的钩子并不一样。onLoad
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Wesley13 Wesley13
3年前
PHP中的NOW()函数
是否有一个PHP函数以与MySQL函数NOW()相同的格式返回日期和时间?我知道如何使用date()做到这一点,但是我问是否有一个仅用于此的函数。例如,返回:2009120100:00:001楼使用此功能:functiongetDatetimeNow(){
达里尔 达里尔
9个月前
vue3 组件切换监听不到onMounted
用vue3的时候有时候会遇到需要监听组件vif,如果遇到组件切换的时候onMounted钩子函数不触发,那么就用onUpdated这个钩子函数vueonUpdated(()//如果需要一个方法在每次vif切换组件的时候需要每次都触发,但是写在onMount