当前位置: 首页 > news >正文

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

以下是 Vue 2 和 Vue 3 中 Vue 实例变量方法的功能差异对比,包含关键方法的详细说明和表格总结:
在这里插入图片描述


核心方法对比

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

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

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

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

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

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

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

8. 全局注册方法(Vue 2 静态方法 vs Vue 3 App 实例方法)
Vue 2Vue 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 2Vue 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 实例到 DOMapp.mount('#app')
app.unmount()卸载 App 实例app.unmount()

对比表格总结

方法Vue 2Vue 3关键差异
$mount实例方法,手动挂载到 DOMApp 实例方法,挂载到 DOMVue 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),无需 $setVue 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() 安装插件,确保作用域清晰。

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

相关文章:

  • 网工备考考纲变化总结
  • ElasticSearch深入解析(五):如何将一台电脑上的Elasticsearch服务迁移到另一台电脑上
  • 详解RabbitMQ工作模式之工作队列模式
  • 定时器的源码介绍与简单实现——多线程编程简单案例[多线程编程篇(5)]
  • Java方法执行机制与入口点实现深度解析
  • HarmonyOS SDK助力鸿蒙版今日水印相机,真实地址防护再升级
  • 第36课 常用快捷操作——用“鼠标右键”退出当前命令
  • RestRequest ,newtonsoft解析
  • 在VS2022中使用Lua与c交互(二)
  • 佛山大旺高新区3650 M5 ERP服务器维修案例
  • 服务器部署flask
  • 第十四章-PHP与HTTP协议
  • 微信聊天机器人搭建 教程/开发
  • 12前端项目----添加购物车1.0
  • 基于 SpringBoot 与 Redis 的缓存预热案例
  • git提交规范记录,常见的提交类型及模板、示例
  • Awesome-Embodied-AI:具身AI机器人领域最全资源汇总(含人形机器人,多足机器人,灵巧手等精选资源)
  • Java程序员转人工智能入门学习路线图(2025版)
  • 【速写】conda安装(linux)
  • android ams调试指令介绍
  • 精准滴灌“种企业”,苏南强县常熟新的进阶密码
  • 王旭任甘肃省副省长
  • 哈工大赵杰:人形机器人要拓展人的能力而非一味复制,未来产业要做成至少10年
  • 石中英已任新成立的清华大学教育学院院长
  • 商务部:中国加快推进服务业扩大开放综合试点为世界注入更多确定性
  • 阿塞拜疆总统阿利耶夫将访华