vue2.x
使用的是 Options APIs
vue3.0
仍然支持vue2.x
的那种选项API(Options APIs)
的方式
vue2.x
的这种Options APIs
,每开发一个功能时,就会在很多地方添加一些零散的代码,对新手来说,是比较友好的,但对长期维护一个比较大型的项目的人来说,你会发现,你要去改一个功能,会比较费劲
composition API 的优势:
this
,(vue2.x
里面的东西比较乱,比较杂,而且任何时候都是指向当前vue组件)Tree-shaking
支持(渐进式体验),主要表现在 需要 哪个成员就import哪个,按需加载
,打包时也是 import了哪个就打包哪个,按需打包
。这样的方式对后面webpack
的打包有很多大的帮助。Tree-shaking
的本质就是消除无用的js代码,而Tree-shaking
的使用前提是 他要能够分辨这个对象有没有被使用到,如果是一个对象具体的某一个方法或属性,那么他就很难分辨它到底有没有被使用。如何开启
Tree-shaking
,在webpack.config.js
文件中在optimization设置下面两个参数
module.exports = {
mode: 'none',
optimization: {
// 模块只导出被使用的成员
usedExports: true,
// 压缩输出结果
minimize: true
}
}
Tree-shaking
更好的支持vue3.0
使用的api都是一些成员的名字,可以理解为变量名,对压缩工具比较熟悉的朋友就比较清楚,变量名被压缩的时候都会被替换成一些简短的字符。而对象的属性
是不会被替换成简短的字符的。所以说,使用这个方式单个导出成员,他的压缩空间会更大一些。尤其是我们使用API越多时,压缩空间就越大注:Composition-API
作为新增的api不会影响旧的逻辑代码,并且Mixin
不再推荐使用。更多关于Composition-API
请参考官网
hoistStatic
-> SSR 优化
)Virtual DOM
机制调整按需加载
,更灵活的组件化更多效果课前往官网的vue-next-template进行尝试
Fragment
- 不受根节点限制,渲染函数可接受 ArrayTeleport
- 类似Portal,随用随取,例如:弹窗、ActionsSuspense
- 嵌套异步依赖,例如:async setup()vue3.0
的数据劫持是由Proxy
实现的,而Proxy
的数据劫持能力相比于Object.defineProperty()
强很多,它几乎可以捕获到响应式对象
的任意一种操作
vue2.x
的数据劫持是由Object.defineProperty()
实现的,Object.defineProperty()
也就是使用getter
、setter
的方式去把它包装成一个响应式的对象
,而这种getter、setter方式有个缺点就是,我们动态的往对象添加一些成员,它是没办法捕获到的
// reactive 将对象包装成一个响应式对象(Proxy对象
const state = reactive({
...
})
// vue 2.x
data: ()=> {
...
}
@vue/cli 4.5版本以后,都支持vue3.0
vue create vue3
vue create vue3
vue-next
就可以了vue add vue-next
大致原理是拦截import发出的http请求
,将代码返回给浏览器,也保留了import语法,让浏览器自己去处理依赖script type module 支持import
。让浏览器处理es6 import
的活,好处就是当前页面引用多少,编译多少,项目越大优势越大。
Vite
相对于webpack
这种工具,主要是解决开发阶段时使用webpack
的一些体验上的不足
Vite
是一个 HTTP服务器,特殊的地方在于:
1.可以在单文件中书写es6语法
2.支持热更新(请求的内容才会被打包/更新,其实也就是有用到的东西才会被打包或更新),而且更新的速度比使用webpack
快很多
3.Rollup
打包
1.自动生成(从上往下执行)
npm init vite-app
cd
npm install
npm run dev
2.手动生成(从上往下执行)
npm install -g vite
全局安装vitenpm init -y
生成一个 package.jsonnpm i -S vue@next
添加vue依赖npm i -D @vue/compiler-sfc
添加vue3.0依赖import {
createApp } from 'vue';
import App from './App.vue'
createApp(App).mount('#app');
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello Vitetitle>
head>
<body>
<div id="app">div>
<script src="./main.js" type="module">script>
body>
html>
vite
命令或者vite serve
命令就可以执行项目。注: vite
/vite serve
是运行项目 vite build
是打包项目
现阶段由于更新比较快,所以安装最新版本的Vue-Router
会较好
1.查看 vue-router的所有版本号
npm info vue-router versions
2.安装最新的vue-router,目前是这个[email protected],后面有更新就安装最新的
npm install [email protected] --save
3.在这里我就使用vite官方自动生成项目来做,在src目录下,新建一个router文件夹,文件夹新建一个index.js
,内容如下
// 按需引入依赖
import {
createWebHashHistory, createRouter} from 'vue-router'
const history = createWebHashHistory()
const router = createRouter({
history,
routes: [
{
path: '/', component: () => import('../components/HelloWorld.vue') },
{
path: '/home', component: () => import('../components/Home.vue') }
]
})
export default router
在main.js
引入,并使用该路由
import {
createApp } from 'vue'
import App from './App.vue'
import router from './router/index'
import './index.css'
// 下面要这样拆分来写
const app = createApp(App)
app.use(router)
app.mount('#app')
接下来路由对应组件的创建跟路由跳转的操作是跟vue2.x一样的
记录总结一下自己学到的东西。可能写得不是很好,有错误的东西请大家指正,互相学习!!