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

vue2和vue3一时转不过来

以下是 Vue2 和 Vue3 在核心语法和功能上的主要区别,结合具体代码示例说明:


一、响应式数据定义方式

1. ​​数据声明位置​

// Vue2 选项式 API
export default {data() {return {name: 'iwen',list: []}}
}// Vue3 组合式 API
import { ref, reactive } from 'vue'
export default {setup() {const name = ref("iwen") // 基本类型用 refconst state = reactive({   // 复杂类型用 reactivelist: []})return { name, state }}
}

区别:

  • Vue2 通过 data() 函数集中声明响应式数据
  • Vue3 在 setup() 中通过 ref/reactive 分散声明,支持按需响应式

二、方法定义与绑定

1. ​​方法定义位置​

// Vue2
export default {methods: {fetchData() {this.list.push('new item')}}
}// Vue3
import { defineComponent } from 'vue'
export default defineComponent({setup() {const fetchData = () => {state.value.list.push('new item') // 需显式访问 .value}return { fetchData }}
})

区别:

  • Vue2 方法定义在 methods 对象中,自动绑定 this
  • Vue3 方法直接定义在 setup() 中,需手动处理响应式数据

三、生命周期钩子

1. ​​钩子名称与调用时机​

// Vue2
export default {created() { console.log('created') },mounted() { console.log('mounted') }
}// Vue3
import { onMounted, onBeforeMount } from 'vue'
export default {setup() {onBeforeMount(() => console.log('beforeMount')) onMounted(() => console.log('mounted')) }
}

区别:

  • Vue2 生命周期直接作为选项
  • Vue3 需从 vue 导入钩子函数,在 setup() 中调用

四、组件通信

1. ​​父子组件通信​

// Vue2 父组件
<Child :msg="parentMsg" @child-event="handleEvent" />// Vue2 子组件
this.$emit('child-event', data)// Vue3 父组件
<Child :msg="parentMsg" @child-event="handleEvent" />// Vue3 子组件
import { defineEmits } from 'vue'
const emit = defineEmits()
emit('child-event', data)

区别:

  • Vue3 需通过 defineEmits 显式声明事件
  • 移除了 $on/$off 等实例方法

五、跨层级通信

1. ​​Provide/Inject​

// Vue2(需通过插件或全局事件)
// 父组件
this.$root.$emit('global-event')// Vue3
// 父组件
import { provide } from 'vue'
provide('theme', 'dark')// 子组件
import { inject } from 'vue'
const theme = inject('theme')

区别:

  • Vue3 的 provide/inject 可在任意层级使用
  • Vue2 需依赖事件总线或 Vuex

六、模板结构

1. ​​根节点限制​

<!-- Vue2 必须单根节点 -->
<div><h1>Title</h1><p>Content</p>
</div><!-- Vue3 支持多根节点 -->
<h1>Title</h1>
<p>Content</p>

区别:

  • Vue3 允许模板直接返回多个根节点(Fragment)
  • 减少不必要的 DOM 包裹层

七、类型支持

1. ​​TypeScript 集成​

// Vue2 需额外配置
// data.ts
interface State {count: number
}
export default {data(): State { ... }
}// Vue3 原生支持
import { defineComponent } from 'vue'
export default defineComponent({setup() {const count = ref<number>(0) // 类型注解return { count }}
})

区别:

  • Vue3 从底层重构了类型系统,提供更好的类型推断

八、性能优化

1. ​​静态提升​

<!-- Vue2 -->
<div>{{ staticText }}</div> <!-- 每次渲染都重新计算 -->
{{ dynamicText }}// Vue3 编译后
const staticText = "Static Content" // 提升为常量
return () => h('div', staticText)

区别:

  • Vue3 通过编译器优化静态内容,减少虚拟 DOM 对比开销

九、其他重要区别

​特性​​Vue2​​Vue3​
​过滤器​ 支持 `{{ msg filter }}`
​指令修饰符​ .sync, .once 通过参数化指令实现(如 v-model:title
​全局 API​ Vue.component() 等全局方法 通过 app.component() 实例化调用

 

http://www.wxhsa.cn/company.asp?id=6065

相关文章:

  • 怎么查询电脑的登录记录及密码更改情况? - Li
  • C语言结构体中的内存对齐
  • 该练习 DP 了!
  • 本周计划
  • PPT文件太大?一招「无损」压缩图片,秒变传输小能手!
  • U3D动作游戏开发读书笔记--2.3 3D游戏所需要的数学知识
  • 9月16模拟赛
  • C++ 单例 Meyers Singleton(迈耶斯单例)
  • EF Core 与 MySQL:查询优化详解
  • 短视频营销运营资深导师张伽赫,东莞绳木传媒创始人
  • 20250913
  • 文件的读取操作
  • 9.13日总结
  • 哇哇哇下雨了!——2025 . 9 . 16
  • 奇思妙想(胡思乱想)
  • AI Compass前沿速览:GPT-5-Codex 、宇树科技世界模型、InfiniteTalk美团数字人、ROMA多智能体框架、混元3D 3.0
  • C++中set与map的自定义排序方法详解
  • id
  • 【汇总】Qt常用模块头文件
  • Advanced Algorithm —— Hashing and Sketching
  • CF2136 Codeforces Round 1046 (Div. 2) 补题
  • 【IEEE出版、EI检索稳定】第四届云计算、大数据应用与软件工程国际学术会议(CBASE 2025)
  • 缺省源
  • 97. 交错字符串
  • MODint(自动取模)
  • BFD实验
  • 2025.9.16——卷1阅读程序1、2
  • 用Context Offloading解决AI Agent上下文污染,提升推理准确性
  • HCIP-BFD
  • MISC相关