# vue-next **Repository Path**: zeroone0011/vue-next ## Basic Information - **Project Name**: vue-next - **Description**: 🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web. - **Primary Language**: TypeScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-23 - **Last Updated**: 2021-12-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Vue3 源码学习 ## 初始化流程 1. `createApp(App) // @vue/runtime-dom` 创建Vue实例,扩展一些方法,比如use, mount, mixin, component, directive; 方法最终的定义位置为 `runtime-core/src/apiCreateApp.ts` 2. createRenderer -> baseCreateRenderer() 对外暴露三个方法,render、hydrate、createApp; hydrate的实际作用是createApp返回的vue实例对象 3. createAppAPI(render, hydrate); 返回createApp() 并且扩展了一些实例方法,链式调用 4. mount(rootContainer: HostElement, isHydrate?: boolean) 作用, 把传入的根组件转化为VNode,然后挂载到rootContainer 中 5. render(vnode, container) 作用: 将VNode渲染到容器container上 6. patch(n1, n2, container);n1 一开始是空的,根据n2的类型执行不同的函数,如果是组件,就会执行 processComponent 7. processComponent(n1, n2, container); 执行组件的挂载或者更新, 因为n1一开始是空,所以直接执行挂载 mountComponent 8. mountComponent(initialVNode, container,); 创建组件实例 createComponentInstance ,设置数据状态 setupComponent 9. setupComponent(); 位于component.ts 10. setupStatefulComponent() 调用 callWithErrorHandling,也就是 调用setup 函数 11. callWithErrorHandling() 调用setup() 传入两个参数 props 和 setupContext 12. handleSetupResult(instance, setupResult, isSSR); 处理setup 函数返回的对象 ## 目录模块 * runtime-dom 运行时dom 关api,属性,事件处理 * runtime-core 运行时核心实例相关代码(平台无关) * shared 内部工具库 # vue-next [![npm](https://img.shields.io/npm/v/vue/next.svg)](https://www.npmjs.com/package/vue/v/next) [![build status](https://github.com/vuejs/vue-next/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/vuejs/vue-next/actions/workflows/ci.yml) This is the repository for Vue 3.0. ## Quickstart - Via CDN: `` - In-browser playground on [Codepen](https://codepen.io/yyx990803/pen/OJNoaZL) - Scaffold via [Vite](https://github.com/vitejs/vite): ```bash # npm 6.x npm init vite@latest my-vue-app --template vue # npm 7+, extra double-dash is needed: npm init vite@latest my-vue-app -- --template vue # yarn yarn create vite my-vue-app --template vue ``` - Scaffold via [vue-cli](https://cli.vuejs.org/): ```bash npm install -g @vue/cli # OR yarn global add @vue/cli vue create hello-vue3 # select vue 3 preset ``` ## Changes from Vue 2 Please consult the [Migration Guide](https://v3.vuejs.org/guide/migration/introduction.html). Also note: Vue 3 does not support IE11 ([RFC](https://github.com/vuejs/rfcs/blob/master/active-rfcs/0038-vue3-ie11-support.md) | [Discussion](https://github.com/vuejs/rfcs/discussions/296)). ## Supporting Libraries All of our official libraries and tools now support Vue 3, but most of them are still in beta status and distributed under the `next` dist tag on NPM. **We are planning to stabilize and switch all projects to use the `latest` dist tag in early 2021.** ### Vue CLI As of v4.5.0, `vue-cli` now provides built-in option to choose Vue 3 preset when creating a new project. You can upgrade `vue-cli` and run `vue create` to create a Vue 3 project today. ### Vue Router Vue Router 4.0 provides Vue 3 support and has a number of breaking changes of its own. Check out its [Migration Guide](https://next.router.vuejs.org/guide/migration/) for full details. - [![beta](https://img.shields.io/npm/v/vue-router/next.svg)](https://www.npmjs.com/package/vue-router/v/next) - [GitHub](https://github.com/vuejs/vue-router-next) - [RFCs](https://github.com/vuejs/rfcs/pulls?q=is%3Apr+is%3Amerged+label%3Arouter) ### Vuex Vuex 4.0 provides Vue 3 support with largely the same API as 3.x. The only breaking change is [how the plugin is installed](https://github.com/vuejs/vuex/tree/4.0#breaking-changes). - [![beta](https://img.shields.io/npm/v/vuex/next.svg)](https://www.npmjs.com/package/vuex/v/next) - [GitHub](https://github.com/vuejs/vuex/tree/4.0) ### Devtools Extension We are working on a new version of the Devtools with a new UI and refactored internals to support multiple Vue versions. The new version is currently in beta and only supports Vue 3 (for now). Vuex and Router integration is also work in progress. - For Chrome: [Install from Chrome web store](https://chrome.google.com/webstore/detail/vuejs-devtools/ljjemllljcmogpfapbkkighbhhppjdbg?hl=en) - Note: the beta channel may conflict with the stable version of devtools so you may need to temporarily disable the stable version for the beta channel to work properly. - For Firefox: [Download the signed extension](https://github.com/vuejs/vue-devtools/releases/tag/v6.0.0-beta.2) (`.xpi` file under Assets) ### IDE Support It is recommended to use [VSCode](https://code.visualstudio.com/). There are currently two viable extensions for Single-File Components (SFCs) support: - [Vetur](https://marketplace.visualstudio.com/items?itemName=octref.vetur) (recommended if you are used to Vetur features) - [Volar](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.volar) (recommended if using TypeScript with SFCs, or `