# vue3-course
**Repository Path**: jayly/vue3-course
## Basic Information
- **Project Name**: vue3-course
- **Description**: vue3课程源码
- **Primary Language**: JavaScript
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 6
- **Created**: 2024-01-30
- **Last Updated**: 2024-01-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# vue3-course
## Hello World
### Vue
1. 前端框架
2. 渐进式
3. 声明式
4. 组件化
### 前置知识
1. HTML&CSS
2. JavaScript基础知识(ES6后的知识)
3. Node.js
4. Vite/Webpack(可选)
5. git(可选)
6. TypeScript(可选)
### 环境
node.js 16+
### 代码
1. 创建项目 `npm create vue`
1. 根据提示填写信息
1. 进入项目目录,输入`npm install`安装依赖
1. 使用`npm run dev`来启动开发模式
1. 访问项目路径
### 手写
`main.js`主文件、入口文件
```javascript
import { createApp } from "vue"
import App from "@/App.vue"
// 创建应用实例
/*
createApp()
- 用来创建一个应用实例
- 参数:
需要一个根组件作为参数
*/
const app = createApp(App)
// 将应用实例挂载到页面中
app.mount("#app")
```
`App.vue`根组件
```vue
你好,Vue
```
### 组件
组件是构成一个项目的基本单位,一个项目就是有多个组件混合而成的。编写项目实际上就是在定义组件!
在Vue中我们使用的是单文件组件,组件中的所有代码(包括结构、表现、行为)统一写在一个`.vue`文件中。一个Vue文件可以包含三个部分:
1. 结构:``
2. 表现:``
3. 行为:``
### API风格
1. 选项式API
```vue
```
2. 组合式API
```vue
```
### 组件的本质
组件本质上就是一个JS的模块!组件中的所有代码最终都会转换为JS。之所以将template和style都转换为js代码就是为了方便我们动态的去显示页面,简单说就是方便向其中添加变量。
在template中,我们是以html的形式在编写js的代码。在style中,我们是以css的形式编写js的代码!
单文件组件(.vue)----编译----> JS代码,由编译器负责!
### 虚拟DOM
组件并没有被直接转换DOM代码,因为DOM操作是比较耗费性能的,非常容易触发浏览器的重绘重排。如果直接将组件转换为DOM代码,大概率不会有太好的性能。
为了解决这个问题,可以将所有的需要操作DOM的代码给它汇总起来,然后进行统一处理,这样就可以避免重复的DOM操作,提高浏览器的渲染性能。
用普通的JS对象来描述真实的DOM结构 —— 虚拟DOM
虚拟DOM ---渲染器---> 真实DOM
单文件组件(.vue)----编译器----> 虚拟DOM ---渲染器---> 真实DOM
## 基础知识
### 响应式原理
响应式对象,当响应式对象发生变化时,与之绑定的界面也会随之属性。
当我们调用`reactive()`时,需要一个普通的JS对象作为参数,它会给我们返回一个代理对象作为返回值。通过代理对象可以对原本的对象进行各种操作,但是在操作的同时代理对象可以实现更多的功能!代理对象主要做了这么两件事:
1. 当有组件使用响应式属性时,代理对象会对其进行记录。
2. 当响应式属性发生变化时,代理对象会通知所有使用该属性的组件进行重新渲染。