# 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 [](https://www.npmjs.com/package/vue/v/next) [](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.
- [](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).
- [](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 `