All Projects → Kingbultsea → vue3-analysis

Kingbultsea / vue3-analysis

Licence: other
vue3源码解释😃

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to vue3-analysis

codemirror-editor-vue3
CodeMirror component for Vue3
Stars: ✭ 22 (-81.67%)
Mutual labels:  vue3, vue-next
vue-cookie-next
A vue 3 plugin for handling browser cookies with typescript support. Load and save cookies within your Vue 3 application
Stars: ✭ 37 (-69.17%)
Mutual labels:  vue3, vue-next
vue-data-visualization
基于Vue3.0的“数据可视化大屏”设计与编辑器
Stars: ✭ 84 (-30%)
Mutual labels:  vue3, vue-next
bpmn-vue-activiti
基于Vue3.x + Vite + bpmn-js + element-plus + tsx 实现的Activiti流程设计器(Activiti process designer based on Vue3.x + Vite + BPMN-JS + Element-Plus + TSX implementation)
Stars: ✭ 345 (+187.5%)
Mutual labels:  vue3, vue-next
vuse-rx
Vue 3 + rxjs = ❤
Stars: ✭ 52 (-56.67%)
Mutual labels:  vue3, vue-next
Vueuse
Collection of essential Vue Composition Utilities for Vue 2 and 3
Stars: ✭ 7,290 (+5975%)
Mutual labels:  vue3, vue-next
vue3.0-template-admin
本项目基于vue3+ElementPlus+Typescript+Vite搭建一套通用的后台管理模板;并基于常见业务场景,抽象出常见功能组件;包括动态菜单,菜单权限、登录、主题切换、国际化、个人中心、表单页、列表页、复制文本、二维码分享等等
Stars: ✭ 500 (+316.67%)
Mutual labels:  vue3, vue-next
Iconpark
🍎Transform an SVG icon into multiple themes, and generate React icons,Vue icons,svg icons
Stars: ✭ 4,924 (+4003.33%)
Mutual labels:  vue3, vue-next
vue3-jd-h5
🔥 Based on vue3.0.0, vant3.0.0, vue-router v4.0.0-0, vuex^4.0.0-0, vue-cli3, mockjs, imitating Jingdong Taobao, mobile H5 e-commerce platform! 基于vue3.0.0 ,vant3.0.0,vue-router v4.0.0-0, vuex^4.0.0-0,vue-cli3,mockjs,仿京东淘宝的,移动端H5电商平台!
Stars: ✭ 660 (+450%)
Mutual labels:  vue3, vue-next
vue-next-rx
RxJS integration for Vue next
Stars: ✭ 31 (-74.17%)
Mutual labels:  vue3, vue-next
fearless
A dashboard scaffolding based on Vue.js 3.x & TypeScript created by Vite.
Stars: ✭ 1,156 (+863.33%)
Mutual labels:  vue3
vite-vue3-tailwind
Boilerplate at vue 3 whit firebase, vue notus, typesctip, vite, tailwind
Stars: ✭ 21 (-82.5%)
Mutual labels:  vue3
vue3-tutorial
Vue3.2、Vite、setup、echarts、composition API
Stars: ✭ 302 (+151.67%)
Mutual labels:  vue3
my-mini-vue
vue3的一些核心逻辑,自己实现的vue3简易版(核心逻辑)框架。
Stars: ✭ 52 (-56.67%)
Mutual labels:  vue3
vue3-oop
使用类和依赖注入写vue组件
Stars: ✭ 90 (-25%)
Mutual labels:  vue3
vue-qqmap
基于Vue3的腾讯地图地址可视化拾取、描点,路径规划插件
Stars: ✭ 21 (-82.5%)
Mutual labels:  vue3
vue3-manjaro-ui
网页版Manjaro。A simulation webpage for Manjaro Linux(KDE Plasma).
Stars: ✭ 109 (-9.17%)
Mutual labels:  vue3
vue-composition-api-ts-todo
ToDo List with Vue 3 Composition API and TypeScript
Stars: ✭ 69 (-42.5%)
Mutual labels:  vue3
v-code-diff
A vue code diff display plugin, support Vue2 / Vue3
Stars: ✭ 93 (-22.5%)
Mutual labels:  vue3
portfolio
simple portfolio use vue3 and vite inspired by wrongakram
Stars: ✭ 22 (-81.67%)
Mutual labels:  vue3

Vue3源码流程图化解释

vue3做了最大的变化就是api的细分,适配typescript。給我一种感觉就是,vue3像乐高,一个个拼接起来成模块,模块之间的互相组合,来构成一个整体,这样更利于团队开发了,可以根据团队情况来定制合适的开发架构。composition-api的出现,如果想真正利用好,弄懂vue3源码是必须的。 vue3中重要的包:Reactivity、runtime-x和 compile-x。

https://www.processon.com/view/link/5f85c9321e085307a0892f7e

(最后更新时间:2021年03月25日22点18分)

(不懂的,想来学习的,或者是想交流的欢迎进群54266285讨论,欢迎大家呀~。目前gitbook还没有整理,有些知识点可能比较乱,表述得不清楚,可以进群探讨)

gitbook链接:https://kingbultsea.github.io/vue3-analysis/book/index.html

如何阅读源码

单步调试单元测试。

使用webstrom,Run -> Edit Configurations -> + -> npm avatar

使用vscode

设置好debugger之后,修改jest.config.js文件指向一个你所需要测试的文件即可。

testMatch: ['<rootDir>/packages/runtime-core/__tests__/**/rendererAttrsFallthrough.spec.[jt]s?(x)']

比如这里是启动runtime-core中的rendererAttrsFallthrough.spec.ts测试用例。

reactivity包的单元测试阅读顺序

ref.spec.ts -> reactive.spec.ts -> readonly.spec.ts -> reactiveArray.spec.ts -> shallowReactive.spec.ts -> effect__.spec.ts -> computed.spec.ts -> collections(Map Set weekMap weekSet的处理)

runtime-core包的单元测试阅读顺序

vnode.spec.ts -> h.spec.ts -> vnodeHooks.spec.ts -> scheduler.spec.ts -> rendererElement.spec.ts -> rendererFragment.spec.ts -> rendererComponent.spec.ts -> rendererChildren.spec.ts(了解diff算法) -> rendererAttrsFallthrough.spec.ts

如何调试promise(microtask微任务)?

在微任务内部打上断点debugger,单步调试时,直接点击跳转到下一个断点即可。

Reactivity

Reactivity是响应式数据包,vue3中可以使用ref和relative来进行响应式数据化,这个包涉及三个概念effect、track、trigger, effect(fn)就好比添加影响,fn执行的过程中,遇到响应式数据取值,则触发响应式数据所获取的字段的track, 添加追踪当前激活的effect,当有事件触发响应式数据对应的字段的修改值的行为时,将会trigger,触发所追踪的effect,再次执行fn的流程。

测试用例(reactivity/__tests__/effect.spec.ts):

it('should observe basic properties', () => {
    let dummy
    const counter = reactive({ num: 0 })
    effect(() => (dummy = counter.num))
    expect(dummy).toBe(0)
    counter.num = 7
    expect(dummy).toBe(7)
})

runtime

涉及到runtime的包有runtime-core、runtime-dom和runtime-test。把vnode渲染成真实的dom,而runtime-core 和runtime-test的区别是,runtime-core是用到生产环境中,runtime-test是用在测试环境中的,两者的代码并没有本质性的区别, 只不过是涉及到真实的dom的时候,runtime-test使用nodeOps来模拟真实dom。

runtime涉及到两个对象,一个是instance,是函数式组件中所用到的(STATEFUL_COMPONENT),用来记录生命周期钩子, 组件之间的上下文交互。 另外一个是vnode,渲染属性的记录。

测试用例(runtime-core/__test__/rendererElement.spec.ts):

beforeEach(() => {
  root = nodeOps.createElement('div')
})

it('should create an element', () => {
  render(h('div'), root)
  expect(inner(root)).toBe('<div></div>')
})

compile

我们使用webpack的vue-loader插件,总是会帮我们把template标签转换成instance.render函数,如果没有该插件,在手写OPTION API中的template,将会在render渲染过程中的第二个步骤,检测当前使用的版本有没有使用compile,有则调用compile转换。

这里compile所做的还有静态标记,静态dom的缓存,重复dom的内存收集。

这里说重点:如果不想了解背后,可以直接使用在线模板编译来查看渲染出vnode。

https://vue-next-template-explorer.netlify.app/

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].