如何正确学习vue3.0源码

动力节点|Vue3实用教程,一套搞定前端框架Vue2+3 024.Vue数据代理时对属性名的要求.avi.baiduyun.uploading。•026.手写Vue框架数据代理的实现.avi.baiduyun.uploading。•034.关于事件回调函数中的this.avi.baiduyun.uploading。•028.Vue框架源代码解读.avi.baiduyun.uploading。•022.数据代理机制的实现.avi.baiduyun.uploading。•032.Vue的事件绑定.avi.baiduyun.uploading。 阅读详情

为什么要学源码

  • 技术是第一生产力
  • 学习 API 的设计目的、思路、取舍
  • 学习优秀的代码风格
  • 学习组织代码的方式
  • 学习实现方法的技巧
  • 学习 ES67 新 API、TS 高级用法
  • 不给自己设限,不要让你周围人的技术上限成为你的上限
  • 面试加分项
  • 装逼利器

学习源码副作用

  • 画虎不成反类犬(强行上马 vue3,自己焦头烂额、项目难以维护、同事苦不堪言)
  • 为了用而用,而不是因地制宜
  • 喜欢炫技写一下看似搞大上,实际没有可读性,影响团队协作的奇技淫巧

vue3 设计动机与目的

  • 更好的逻辑复用与代码组织
    • vue2 option api 的代码风格将同一逻辑点的代码分散在各处,会导致读者关注点分离,也不利于代码的逻辑复用;而 vue3 composition api 将同一业务逻辑的代码聚合在一起命名为 useXXX 函数,再通过 setup 将不同的逻辑组装起来并返回给组件 data,明显更方便逻辑复用。
    • vue2 mixin 用于逻辑复用的时候容易导致命名冲突和数据来源不清晰;而 vue3 provide/inject 配合 composition api 可以很方便的找到数据来源并通过解构重命名,明显更方便逻辑复用。
  • 更好的类型推导
    • 在 methods 中 this 指向组件实例而不是 method 本身,不利于类型推导。
    • 例如 this.router、this.store,每个新的插件都会需要向 Vue 追加类型定义。
vue源码相关视频讲解:进入学习

更新前后对比

优化

  • 打包更小(全局 API tree-shaking)
  • 渲染、更新更快,内存占用减少
  • 使用 proxy 取代 Object.defineProperty
  • v-model 代替以前的 v-model 和.sync
  • 生命周期变更 例如 destroyed beforeDestroy 改为 unmounted beforeUnmount
  • 自定义指令 API 与生命周期保持一致
  • Diff 算法的提升(静态标记、静态提升)

新特性

  • Template 支持多个根标签
  • composition API 实现逻辑模块化和复用
  • Teleport 传送门组件 代码块挂载到任意位置
  • Suspense 悬停组件 异步加载组件使用(实验属性)
  • 使用 @vue/runtime-core 的 createRenderer 自定义渲染器(跨平台利器)
  • 使用 ts 编写源码,更好的类型推导、更好的适配 ts

更多变化

疑问解答

问题一:compostion api 根本没有解决任何问题,只是追逐新玩意的东西

尤雨溪: 不同意这个观点。
Vue 最开始很小,但是现在被广泛应用到不同级别复杂度的业务领域,有些可以基于 option API 很轻松处理,但是有些不可以。例如下面的场景:

  • 有很多逻辑的大型组件(数百行)
  • 在多个组件可复用的逻辑

对于问题 1,你需要把每个逻辑拆分到不同选项,例如,一段逻辑需要一些响应数据,一个计算属性,一些监听属性还有方法。你去了解这段逻辑时,需要不断上下移动阅读,虽然你知道一些属性是什么类型,但是你并不知道他具体的作用。当一个组件包含多个逻辑,情况就更糟糕了。如果用新的 API,可以将数据和逻辑组合在一起,最重要的是,你可以干净的把这些逻辑提取到一个函数,甚至一个单独的文件中。

问题二:使用新 API 导致逻辑分散到不同地方,违背"关注点分离"

尤雨溪: 这个问题和项目文件组织方式问题类似。我们很多人都同意按文件类型组织(布局放 HTML,样式 CSS,逻辑 JS)并不是正确的方式,因为强制把相关代码分割到三个文件,只是给人一种“关注点分离”的错觉。这里的关键是“关注点”不是由文件类型定义。相反,我们大多数选择以功能或者职责来组织文件,这正是人们喜欢 Vue 单文件组件的原因。SFC 就是按功能组织代码的方法,但讽刺的是当首次引入 SFC 时,许多人也是拒绝的,认为它违反了关注点分离。

问题三:新的语法让 Vue 失去简单性,导致"意大利面条式代码"的出现,降低项目维护性。

尤雨溪: 正好相反,新的 API 就是为了提高项目长期维护性的。如果我们查看任何 javascript 项目,都会从入口文件开始阅读,该文件的本质是你的应用启动时被隐式调用的"main"函数。如果只有一个函数入口,会导致意大利面条代码,那所有的 js 项目都是意大利面条代码。显然不是的,因为开发人员通过代码模块化或者较小的函数来组织代码。另外,我同意新的 API 理论上会降低代码质量的最低门槛。但是我们可以使用以往防止代码变成意大利面条的手段缓解这种情况。另一方面,新的 API 可以提升代码质量的最高上限,相比 option api,你可以重构为质量更高的代码。而且,基于 Option api 你还得解决类似 mixins 的问题。很多人认为"Vue 失去简单性",实际上只是失去组件内代码类型检查能力(就是你不知道一个变量时 data、method、还是 computed)。但是用新的 API,实现一个类型检测器也是非常容易实现以前的特性的。也就是说,你不应该被 option api 限制思维,而更多关注逻辑内聚问题

源码调试

  • 安装源码及依赖(安装依赖出错一般是 npm 淘宝源的问题或者需要梯子)
git clone https://github.com/vuejs/vue-next.git
yarn install
yarn dev --sourcemap

  • 在源码中打入 debugger image.png

  • 对源码进行打包

yarn dev --sourcemap

  • 新建 packages/vue/examples/index.html 用于测试
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <div>
    <div>test demo {{msg}}</div>
    <div>test demo {{msgMore}}</div>
  </div>
</div>
<script src="../dist/vue.global.js"></script>
<script>
  Vue.createApp({    setup() {      const msg = Vue.ref('Hello')      const msgMore = Vue.computed(()=>msg.value+' world')      return {        msg,        msgMore      }    }  }).mount('#app')
</script>
</body>
</html>

  • 谷歌浏览器打开 index.html F12 image.png image.png
Vue基础之指令与过滤器 ES6模块化 ES6模块化规范是浏览器端与服务器端通用的模块化开发规范。它的出现极大的降低了前端开发者的模块化学习成本,开发者不需再额外学习AMD、CMD或CommonJS等模块化规范。 ES6模块化规范中定义: 每个js文件都是一个独立的模块 导入其它模块成员使用import 关键字 向外共享模块成员使用export关键字 p230 Promise async/await EventLoop 宏任务和微任务 API接口案例 前端工程化 实际的前端开发: 模块化(js的模块化、css的模块化、资源的模 阅读详情

相关推荐

vue3.0源码调试

随着vue3.0的到来越来越近,将vue-next的代码clone到本地来研读的计划再次打开,鉴于之前在发布alpha版本的时候已经clone过一次了,这次只是简单的更新了一下代码。但是看着那可怕的更新数量还是被尤的高产惊到了。 1. vue3.0打开之路 首先自然是需要找到vue3x的代码库咯,在GitHub上直接搜索vue next就可以看到已经用typescript重写之后的vue了 此...

qq_39217871的博客 1182

Vue 3.0 源码开放,看看都有哪些新特性

当大多数国人还在庆祝国庆节的时候,尤雨溪大大在昨天凌晨发布了 Vue 3.0 源代码源码地址:https://github.com/vuejs/vue-next 。虽然目前还 处于 Pre-Alpha 版本,但是可以预见后面的 Alpha、Beta 等版本应该不会太遥远。 之前,就有预言,除了性能优化、脚手架和新功能外,TypeScript绝对是一个重点,因此,在Vue 3.0源代码版本中,9...

xiangzhihong8的专栏 2万+

vue3项目练习大全(附github源码

vue慢慢的成为了前端最受欢迎的框架之一,在很多项目之中开发都能用得到,如今也已经发展到3.0了,可能是因为这个框架可以提高工作效率,因此受到大家的追捧,在之前的文章里面也说过,2019年,大前端学习小程序和vue是必备技能。如果在平时的工作里,有些公司用不到这两项技能,那你也要在业余的时间里面,找一些教程和练手的vue小项目。:vue3 + vuex + typescript + webpack + vant-ui + axios + less + postcss-pxtorem(rem适配)

前端-尔嵘 1万+

Vue3源码 学习

学习vue源码

qq_42544091的博客 3712

Vue3.0源码学习之一手撸reactive

文章仅用于记录自己在学习vue3.0过程中的理解,将分为多个版本来解读核心源码,有问题请多看vue3官方文档vue3.0-- 传送门 如果想要测试下面代码,直接通过官方cli 搭建vue3 把不要的东西删除之后的项目结构 main.js // import {reactive,effect,computed,ref } from '@vue/reactivity' //官方包,可以用作自己手撸代码的标准 // 引入自己的包,手写reactive 分析其原理 import { reactive, .

qq_42514643的博客 411

教你阅读vue源码正确姿势,看完就学废!

简介一下个人阅读vue源码的姿势,有建议欢迎评论区补充哈~ 一、源码阅读姿势 1. 先整体 - 后细节 先弄清楚源码分为哪几个模块,整套流程是怎么将各个模块串起来的。 然后细化了解每个模块的核心原理。 2. 站在别人的肩膀上 不用一股脑扎进源码仓库里一点点啃,这样很低效,适用于对源码较为了解的人 推荐先读别人的源码简介,源码分析,弄清楚脉络,还有每个部分的大概功能和核心流程。心里带着思路去看源码实现。 多数情况不需要逐行代码的细究,但针对某些核心功能的实现需要细究,例如:虚拟dom、diff算法、.

weixin_52546522的博客 5903

vue3.0全新文档快速上手学习内容整理

vue3.0版本文档总结

总结前端开发中遇到的问题,分享前端知识 1万+

Vue.js技术内幕:最好的Vue3.0源码解读书籍

肯定无数次想学源码,又没有勇气把代码下载下来,或者下载下来了,不知从哪学起。从现在开始,这件事交由“说书匠”来办,读完本系列,你将轻松理解Vue3.0源码的精髓。

灵感干货铺 1890

Vue3核心源码解析第一课 看懂Vue3的优化

我现任 Zoom 前端架构师,曾先后于百度、滴滴从事前端研发工作。我平时喜欢钻研新技术、新框架,关注前端自动化、工程化、前端架构。和很多常年打磨自身编程能力的开发者一样,我对代码有洁癖,一直在努力追求高质量的代码。前端技术日新月异的今天,前端应用的复杂度也在日益提升,熟练掌握一门 MVVM 前端开发框架已经成为必然要求,因为它能够很大程度上帮助前端开发者提高生产力。Vue.js、React 和Angular 是目前国内最流行的三个前端 MVVM 框架,其中 Vue.js 凭借轻量、易上手的优势收获了大批粉丝

fegus的博客 3456

Vue3.0中文文档(Vue3 + TS学习资源路线)

Vue3.0 学习资源文档: Vue3.0 中文文档:https://www.vue3js.cn/docs/zh/ Vue3.0 组合API使用:http://www.liulongbin.top:8085/#/ Vue3.0 Vuex 替代方案: https://zhuanlan.zhihu.com/p/114783130 B站视频学习: 尤雨溪Vue3.0 : https://www.bilibili.com/video/BV1ke411W7WB/ Vue3.x 大地老师:https://www

星宇大前端 4875

Vue3.0入门级教程/总结/一小时速成 【含代码、文档、资源】

Vue.js 个人知识总结Vue.js一级目录二级目录三级目录1.1模板语法1.2、条件语句1.3循环语句2.1组件component3.1计算属性 3.2监听属性4.1样式绑定5.1事件处理6.1表单7.18.1路由9.1mixins10.1axios 一级目录 二级目录 三级目录 1.1模板语法 插值 : 1文本 2 html (使用v-html指令操作html内容) 3属性** v-bind** 操作html属性 4 v-on监听事件 5** v-if** 条件语句 6** v-for **循

champion564的博客 4264

Vue3快速上手

什么是hook?—— 本质是一个函数,把setup函数中使用的Composition API进行了封装。类似于vue2.x中的mixin。自定义hook的优势: 复用代码, 让setup中的逻辑更清楚易懂。

薛定谔的猫 626

VUE3Vue.js 3.0 从入门到进阶

前言 2020 年 9 月 19 日 Vue3 更新了正式版本,自此VUE正式开启了3.x的时代!Vue3也是目前最值得一学的前端框架之一。 一、Vue3 简介及基础环境搭建 1. Vue3 新特性简介 官方网站地址: v3.vuejs.org Vue3 有哪些新特性呢? Vue3采用渐进式开发,向下兼容:Vue3 支持大多数 Vue2 的特性,也就是说咱们使用 Vue2 的语法开发 Vue3,也是没有任何问题的,当然我们并不推荐这种做法; 性能的提升,每个人都希望使用的框架更快、更轻,V

ColdCoder的博客 5903

小满vue3笔记(含源码解读)

。。AST语法数:这个东西在ES6转ES5的插件babel;ts转js中会进行ast转换根据满哥说的,我的理解是vue3在用js去描述DOM对象;这个描述和操作不一样(js操作dom)正在上传…重新上传取消为什么不直接操作dom:原因:dom的属性太多,影响性能我看是说这一次描述dom,会全部描述进去,影响性能。

ceike的博客 4268

vue3源码详细分析

Vue 3是目前比较流行和使用的一种现代化JavaScript框架,其源码分析对于加深对前端框架的理解和开发能力有很大帮助。Vue 3源码主要由以下几个模块组成:Compiler模块:解析Vue模板,将其转换为渲染函数。Renderer模块:将组件渲染为真实的DOM元素。Reactivity模块:实现了响应式数据绑定。Runtime-core模块:实现了Vue组件的实例化、生命周期、事件等核心功能。Shared模块:包含了一些公共的工具函数。

一步一个脚印,踏实努力,向着目标前进 6275

Vue3中的13个全局Api-源码解析学习

本文章共5314字,预计阅读时间5-15分钟。 前言 不知不觉Vue-next的版本已经来到了3.1.2,最近对照着源码学习Vue3的全局Api,边学习边整理了下来,希望可以和大家一起进步。 我们以官方定义、用法、源码浅析三个维度来一起看看它们。 下文是关于Vue3全局Api的内容,大家如果有更好的理解和想法,可以在评论区留言,每条我都会回复~ 全局API 全局API是直接在Vue上挂载方法,在Vue中,全局API一共有13个。分别是: createapp 返回一个提供应用上下文的应用实例; h ..

Tz 1022
上一篇: 京东前端高频面试题合集
下一篇: vue源码中的nextTick是怎样实现的
yyzzabc123
博客等级 码龄4年 11粉丝 91原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值