-
• x vs 2.x 创建实例
-
• 对比说明
-
• 声明组件
-
• Vue 2.x 中声明组件
-
• Vue 3.x 中声明组件
-
• vue2 和 vue3 有哪些区别 与 联系
-
• 区别:
-
• 响应式系统:
-
• Composition API:
-
• 多根节点支持:
-
• 生命周期钩子调整:
-
• 性能优化:
-
• Teleport:
-
• 联系:
-
• 设计理念一致:
-
• 向后兼容:
-
• 生态共享:
3.x vs 2.x 创建实例
‘2.x’ 和 ‘3.x’ 整体创建形式有了很大的更改
-
• 在’3.x’ 不在使用通过
new Vue
形式创建Vue 实例,而是改用createApp
并且3.x
不在是通过el
和$mount
将数据渲染和dom绑定,而是通过新的mount
形式 -
•
3.x
data 组件选项声明不再接收纯JavaScript object
,而需要function 声明
对比说明
vue2
在Vue2中,我们通常使用 Vue构造函数来声明一个Vue应用,如下所示:
var vm = new Vue({
// el:'#app', 或者使用el形式不使用$mount
data: {
counter: '10',
},
}).$mount('#app')
vue3
在Vue3中,我们可以使用 createApp方法来创建一个应用,如下所示:
// 创建vue
import { createApp } from 'vue'
var app = createApp({
data() {
return {
message: 'Hello Vue!'
}
}
})
app.mount('#app')
此外,Vue3引入了一些新的API和特性。
例如,它引入了Ref和Reactive API用于声明响应式变量。
同时,Vue3通过setup函数统一声明逻辑,而Vue2的逻辑则分散在多个选项中。
另外,Vue3直接支持返回Promise的异步组件。
生命周期方面,虽然整体变化不大,但 大部分生命周期钩子名称上需要添加“on”前缀。
此外,Vue3还优化了diff算法,新增了静态标记(patchflag),以减少非动态数据的比对时的性能消耗。
需要注意的是,尽管Vue3在语法和功能上有所更新,但其底层开发思想与Vue2是一致的。
声明组件
在Vue.js中声明组件的方式随着版本的升级有所变化,下面分别说明如何在Vue 2和Vue 3中声明一个基本组件:
Vue 2.x 中声明组件
// Vue 2.x 声明全局组件
Vue.component('my-component', {
template: `
<div>
<h1>{{ title }}</h1>
<p>{{ message }}</p>
</div>
`,
data() {
return {
title: 'Vue 2 Component',
message: 'Hello, Vue 2!'
}
},
methods: {
greet() {
console.log('Greetings from Vue 2!');
}
},
mounted() {
this.greet();
}
});
// 或者在单文件组件(.vue)中声明
// my-component.vue
<template>
<div>
<h1>{{ title }}</h1>
<p>{{ message }}</p>
</div>
</template>
<script>
export default {
data() {
return {
title: 'Vue 2 Component',
message: 'Hello, Vue 2!'
};
},
methods: {
greet() {
console.log('Greetings from Vue 2!');
},
mounted() {
this.greet();
}
}
};
</script>
Vue 3.x 中声明组件
// Vue 3.x 使用setup函数配合Composition API声明全局组件
import { ref, onMounted } from 'vue';
const MyComponent = {
setup() {
const title = ref('Vue 3 Component');
const message = ref('Hello, Vue 3!');
function greet() {
console.log('Greetings from Vue 3!');
}
onMounted(() => {
greet();
});
return {
title,
message
};
},
template: `
<div>
<h1>{{ title }}</h1>
<p>{{ message }}</p>
</div>
`
};
// 或者使用<script setup>语法糖在单文件组件(.vue)中声明
// my-component.vue
<template>
<div>
<h1>{{ title }}</h1>
<p>{{ message }}</p>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
const title = ref('Vue 3 Component');
const message = ref('Hello, Vue 3!');
function greet() {
console.log('Greetings from Vue 3!');
}
onMounted(greet);
</script>
注意在Vue 3中, 引入了Composition API,它允许开发者以更灵活、可复用的方式组织逻辑。
-
•
ref
和reactive
是用于创建响应式数据的API, -
• 生命周期钩子如
onMounted
等现在作为单独的函数导入并直接调用。
另外,Vue 3中没有了 this
关键字,取而代之的是通过 setup
函数返回的对象属性来暴露给模板使用的变量和方法。
vue2 和 vue3 有哪些区别 与 联系
Vue.js 从 Vue 2 过渡到 Vue 3,带来了一系列的改进和新特性,同时保持了对原有核心理念的延续。
以下是 Vue 2 和 Vue 3 的主要区别与联系:
区别:
响应式系统:
-
• Vue 2 使用
Object.defineProperty
钩子来实现数据响应式,仅能监测对象属性的变化。 -
• Vue 3 则改用 ES6 的 Proxy 对象替代,它能够更全面、高效地监听对象的所有属性,包括数组索引和新增属性。
Composition API:
-
• Vue 2 使用的是 Options API(即组件内的 data、methods、computed、watch 等选项)组织代码。
-
• Vue 3 引入了 Composition API,允许开发者以函数的形式组织逻辑,提供了更好的代码复用性和可读性,如
setup()
函数、ref
、reactive
、computed
等。
多根节点支持:
-
• Vue 2 中单文件组件模板必须有且只有一个顶级元素作为根节点。
-
• Vue 3 支持模板中的多个顶级元素,允许在单个组件中返回多个DOM节点,即支持碎片(Fragments)功能。
生命周期钩子调整:
-
• Vue 3 继承了大部分 Vue 2 的生命周期概念,但对其名称进行了调整,例如添加了前缀 “on” (
beforeCreate
变为onBeforeCreate
),并引入了新的生命周期钩子,如onMounted
替代mounted
。
性能优化:
-
• Vue 3 在编译器和运行时方面做了许多性能优化,减少内存占用并提高了更新速度。
Teleport:
-
• Vue 3 新增了
<teleport>
组件,可以将组件内容渲染到 DOM 树中的任意指定位置。
联系:
设计理念一致:
Vue 3 在设计上继承了 Vue 2 的核心理念,即易用、灵活和高效的组件化开发模式,以及声明式的数据绑定和视图更新机制。
向后兼容:
虽然 Vue 3 有很多重大改动,但它仍然尽可能地保持了向后兼容性,使现有的 Vue 2 应用程序可以通过迁移工具逐步升级至 Vue 3。
生态共享:
Vue 2 和 Vue 3 共享一个庞大的生态系统,很多插件和库都逐步更新以适应 Vue 3,同时也存在一些方案帮助开发者在 Vue 2 项目中使用 Vue 3 的 Composition API。
Vue 3 是 Vue 2 的进化版,在保留其优点的基础上,通过底层技术革新和新API的引入,提升了框架的性能、灵活性和可维护性。
原文始发于微信公众号(前端爱好者):vue3.x学习笔记之声明vue2和vue3
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/267295.html