Vue 2 和 Vue 3 中 Vue 实例变量方法的功能差异对比,包含关键方法的详细说明和表格总结

以下是 Vue 2 和 Vue 3 中 Vue 实例变量方法的功能差异对比,包含关键方法的详细说明和表格总结:


核心方法对比

1. $mount()
Vue 2 Vue 3
作用:手动挂载实例到 DOM 元素 作用:手动挂载 App 实例到 DOM 元素
参数element(DOM 元素或选择器字符串) 参数element(DOM 元素或选择器字符串)
返回值:Vue 实例 返回值:根组件实例
示例vm.$mount('#app') 示例app.mount('#app')
差异 :Vue 3 的 mount 是 App 实例方法,而非组件实例方法

2. $destroy()
Vue 2 Vue 3
作用:销毁 Vue 实例,停止监听和事件 作用:销毁组件实例,停止响应式更新
参数:无 参数:无
示例vm.$destroy() 示例vm.$destroy()
差异 :Vue 3 中仍可用,但需注意组件销毁时的生命周期钩子(如 onUnmounted

3. 事件系统($on, $once, $off, $emit
Vue 2 Vue 3
$on:在实例上监听事件 $on :仍可用,但推荐使用 setuponMounted 等 Composition API
$emit:触发当前组件事件 $emit :仍可用,但事件系统更灵活(如通过 defineEmits 定义)
差异 :Vue 3 推荐使用 setup 中的 emit 函数,而非直接调用 $emit

4. $watch()
Vue 2 Vue 3
作用:监听数据变化 作用 :监听响应式数据(推荐使用 watch 钩子)
参数expression, callback 参数source, callback(需通过 watch 函数)
示例vm.$watch('count', callback) 示例watch(() => state.count, callback)
差异 :Vue 3 中 watch 是全局函数,需在 setup 中调用

5. $set$delete
Vue 2 Vue 3
作用:添加/删除响应式属性 作用 :Vue 3 推荐使用 reactiveref 直接操作,无需 $set
替代方案 :Vue 3 中直接通过 proxy 操作对象属性即可触发响应式更新
差异 :Vue 3 中 $set$delete 仍然可用,但更推荐直接操作响应式对象

6. $nextTick()
Vue 2 Vue 3
作用:DOM 更新后执行回调 作用 :仍可用,但返回 Promise(Vue 2 需第三方 polyfill)
示例vm.$nextTick(() => { ... }) 示例await nextTick()(在 setup 中使用)
差异 :Vue 3 中 nextTick 是全局函数,无需通过实例调用

7. $forceUpdate()
Vue 2 Vue 3
作用:强制重新渲染 作用:仍可用,但 Vue 3 的响应式系统更智能,通常无需调用
差异 :Vue 3 推荐通过 refreactive 直接触发更新

8. 全局注册方法(Vue 2 静态方法 vs Vue 3 App 实例方法)
Vue 2 Vue 3
Vue.component():注册全局组件 app.component():通过 App 实例注册全局组件
Vue.directive():注册全局指令 app.directive():通过 App 实例注册全局指令
Vue.mixin():注册全局混入 app.mixin():通过 App 实例注册全局混入
差异:Vue 3 将全局注册方法移到了 App 实例上,不再通过 Vue 静态方法

9. 插件安装(Vue.use() vs app.use()
Vue 2 Vue 3
Vue.use(plugin):安装插件到全局 app.use(plugin):安装插件到 App 实例
差异:Vue 3 中插件需通过 App 实例安装

Vue 3 新增方法

方法 作用 示例
app.component() 注册全局组件 app.component('MyButton', MyButtonComponent)
app.directive() 注册全局指令 app.directive('focus', { mounted: el => el.focus() })
app.provide() 提供响应式数据给后代组件 app.provide('user', reactive({ name: 'Alice' }))
app.mount() 挂载 App 实例到 DOM app.mount('#app')
app.unmount() 卸载 App 实例 app.unmount()

对比表格总结

方法 Vue 2 Vue 3 关键差异
$mount 实例方法,手动挂载到 DOM App 实例方法,挂载到 DOM Vue 3 的 mount 需通过 App 实例调用,返回根组件实例
$destroy 销毁 Vue 实例 销毁组件实例 生命周期钩子需用 onUnmounted 等 Composition API
事件系统 $on/$emit 在实例上监听/触发事件 推荐使用 setup 中的 emit 函数,事件更灵活 Vue 3 推荐 Composition API 和 defineEmits 定义事件
$watch 监听数据变化,需通过实例调用 使用 watch 全局函数,需在 setup 中调用 Vue 3 的 watch 更灵活,支持多个源和深度监听
$set/$delete 向对象添加/删除响应式属性 直接操作响应式对象(如 reactive),无需 $set Vue 3 的响应式系统更智能,直接操作对象即可触发更新
$nextTick 返回回调函数,需通过实例调用 返回 Promise,可通过 await 使用 Vue 3 的 nextTick 是全局函数,无需通过实例调用
$forceUpdate 强制渲染 仍可用,但推荐通过响应式系统触发更新 Vue 3 的响应式系统更强大,减少强制更新的需求
全局注册 通过 Vue.component/directive/mixin 静态方法 通过 App 实例的 component/directive/mixin 方法 Vue 3 将全局注册移到 App 实例,避免全局污染
插件安装 Vue.use() 全局安装插件 app.use() 在 App 实例上安装插件 Vue 3 插件作用域更明确,避免全局副作用

迁移建议

  1. 全局注册 :Vue 3 中需通过 app.component/directive/mixin 替代 Vue 2 的静态方法。
  2. 事件系统 :优先使用 Composition API 的 defineEmitsemit 函数。
  3. 响应式操作 :直接操作 reactiveref 对象,无需 $set
  4. 生命周期 :用 onMountedonUnmounted 等钩子替代 $destroy$mount 的部分逻辑。
  5. 插件安装 :通过 app.use() 安装插件,确保作用域清晰。

如果需要更具体的代码示例或迁移步骤,请进一步说明!

相关推荐
代码小学僧几秒前
使用 Cloudflare workers 做一个定时发送消息的飞书机器人
前端·云原生·serverless
前端付豪1 分钟前
2、ArkTS 是什么?鸿蒙最强开发语言语法全讲解(附实操案例)
前端·后端·harmonyos
吃瓜群众i2 分钟前
javascript-对象及应用
前端·javascript
Oder_C3 分钟前
通用组件-字典组件优化思路
前端·性能优化
吃瓜群众i3 分钟前
Javascript的核心知识点-函数
前端·javascript
zhujiaming4 分钟前
鸿蒙端应用适配使用开源flutter值得注意的一些问题
前端·flutter·harmonyos
前端付豪5 分钟前
8、鸿蒙动画开发实战:做一个会跳舞的按钮!(附动效示意图)
前端·后端·harmonyos
前端付豪5 分钟前
3、构建你的第一个鸿蒙组件化 UI 页面:实现可复用的卡片组件(附实战代码)
前端·后端·harmonyos
言诺意深7 分钟前
leaflet地图库-初始化(1)
前端
前端付豪7 分钟前
7、打造鸿蒙原生日历组件:自定义 UI + 数据交互(附实操案例与效果图)
前端·后端·harmonyos