简介:认识Vue3和项目搭建
- Vue3优点
- 更小的打包体积和内存
- 页面第一次的渲染速度和更新速度更快
- 更好的支持
TypeScript - 新增了
Composition API和内置组件
- 搭建Vue3项目
- vue-cli创建
- 保持跟课程脚手架版本一致4.5.17,防止引用插件出现兼容问题
npm install -g @vue/cli@4.5.17- 查看版本,不一致时重新安装
vue -V //查看版本全局卸载重装npm uninstall -g vue-clinpm install -g @vue/cli@4.5.17- 创建项目
vue create vue_project- 进入项目目录启动
npm run serve1:vite 创建的项目速度快 但是默认的配置过于精简
项目工程文件介绍与Devtools安装
- 项目文件
- 入口文件
main.js
- 使用
createApp解析模板,更加小巧
import { createApp } from 'vue'import App from './App.vue'createApp(App).mount('#app')- 组件
<template>标签里可以插入多个根标签
Devtools安装
- 正式版的
Devtools在Vue3项目中不生效
详解常用Composition API
简介:走进Vue3的世界—setup
- setup
setup函数是Vue3新的配置项- 是使用组合API的前提,数据、方法都要放到
setup函数里声明 - 写法
setup() {const name = "张三";const age = 18;function sayHello() {alert("你好,我是${name},今年${age}岁了");}return {name,age,sayHello,};},实现数据的响应式—ref函数
简介:实现数据的响应式—ref函数
- 定义
- 定义一个响应式的数据
- 基本类型数据
- 引入
ref函数
import { ref } from "vue";- 创建一个包含响应式数据的引用对象(
ref对象)
let name = ref("张三");let age = ref(18);- 操作数据
function changePerson() {name.value = "李四";age.value = "19";}- 对象类型数据
- 创建一个包含响应式数据的引用对象(
ref对象)
let obj = ref({xd: "课堂",course: "vue3",});- 操作数据
function changeCourse() {obj.value.course = "react";}- 注意
- 可以处理基本类型数据、数组或者对象类型的数据
- 基本类型数据的响应式是通过
Object.defineProperty()实现 - 对象类型数据的响应式是通过 ES6 中的
Proxy实现
实现数据的响应式—reactive函数
简介:实现数据的响应式—reactive函数
- 定义
- 定义一个
对象类型的响应式数据(不能处理基本类型数据)
- 写法
- 对象
// 定义let obj = reactive({xd: "课堂",course: "vue3",});// 修改obj.course = "node";- 数组
// 定义let list = reactive(["吃饭", "睡觉", "敲代码"]);// 修改list[3] = "打游戏"reactive和ref不同点
- 处理数据类型不同:
ref可以处理基本类型和对象(数组)类型数据,reactive只能处理对象(数组)类型数据 - 实现原理不同:
ref处理基本类型数据通过Object.defineProperty()实现,reactive通过Proxy实现 - 操作不同:
ref操作数据需要加.value
- 组件数据多时更加趋向使用
reactive
剖析setup函数的执行时机和两个参数
简介:详解setup函数的两个参数
- 执行时机
- 在生命周期函数
beforeCreate之前执行一次,而且setup函数没有this
- 两个参数
- props
- 第一个参数接收父组件的值,是一个对象
export default {props: ["mess"], //需要props声明才能在setup收到参数setup(props) {console.log(props.mess);},};- context
- 上下文对象
- 触发自定义事件
export default {emits: ["xd"], //需要emits声明才能在setup中使用setup(props, context) {function clickMe() {context.emit("xd", "子组件的值");}return {clickMe,};},};掌握setup中的计算属性—computed函数
简介:详解computed函数
- 定义
- 通过已有的属性计算而来,跟vue2.x中的功能原理一样,使用方式有区别
- 使用
- 计算
ref定义的响应式数据
const fullName = computed({get() {return firstName.value + "-" + lastName.value;},set(value) {const arr = value.split("-");firstName.value = arr[0];lastName.value = arr[1];},});- 计算
setup定义的响应式数据
person.fullName = computed({get() {return person.firstName + "-" + person.lastName;},set(value) {const arr = value.split("-");person.firstName = arr[0];person.lastName = arr[1];},});掌握setup中的监视属性—watch函数上
简介:详解watch函数
- 定义
- 监听值的变化,执行相关的操作,跟vue2.x中的配置一样
- 监听
ref定义的数据
- 基本类型
// 监听一个ref定义的数据watch(num, (newValue, oldValue) => {console.log("num增加了", newValue, oldValue);},{ immediate: true, deep: true });// 监听多个ref定义的数据watch([num, num1], (newValue, oldValue) => {console.log("num增加了", newValue, oldValue);});掌握setup中的监视属性—watch函数下
简介:详解watch函数
- 监听
reactive定义的数据
- 使用
- 监听对象类型
watch(numObj, (newValue, oldValue) => {console.log("numObj变化了", newValue, oldValue);});- 监听对象中的一个基本类型属性
watch(() => numObj.a,(newValue, oldValue) => {console.log("numObj变化了", newValue, oldValue);});- 监听对象中的一些基本类型属性
watch([() => numObj.a, () => numObj.b], (newValue, oldValue) => {console.log("numObj变化了", newValue, oldValue);});- 监听对象中的对象类型属性
watch(numObj.c,(newValue, oldValue) => {console.log("numObj.c变化了", newValue, oldValue);});- 总结
- 实现监听生效
ref定义的数据
- 基本类型数据作为监听值
- 对象作为监听值,需要加
.value(用的少)
reactive定义的数据
- 对象作为监听值
- 属性作为监听值,需要放在回调函数中
认识setup中的watchEffect函数
简介:详解watchEffect函数
- 定义
- 在监听的回调函数中使用了属性,则监听该属性,不用在参数上指明监听哪个属性
- 写法
watchEffect(() => {let xd = numa.value;let xd1 = numb.value;console.log("watchEffect函数执行了");});- 与
watch的区别
- 属性监听区别:
-
watch手动添加定向的监听属性 -
watchEffect自动监听使用到的属性
- 初始化执行:
-
watchEffect会初始化执行一次
- 建议开发中使用
watch监听,逻辑简单、依赖属性少的场景可以使用watchEffect
掌握生命周期函数和数据处理
掌握Vue3中的生命周期函数
简介:详解Vue3中的生命周期函数
- 创建
创建前、后:beforeCreate、created创建:setup- 挂载
挂载前、后:beforeMount、mounted挂载:onBeforeMount、onMounted- 更新
更新前、后(beforeUpdate、updated)更新:onBeforeUpdate、onUpdated- 卸载
销毁前、后:beforeDestroy、destroyed卸载:onBeforeUnmount、onUnmounted掌握Vue3中的toRef和toRefs函数
简介:详解Vue3中的toRef和toRefs
- toRef
- 定义
- 创建一个
ref对象,其value值指向另一个对象中指定的属性
- 写法
const name = toRef(person, "name");- 作用
- 将某个响应式对象的某一个属性提供给外部使用
- toRefs
- 定义
- 批量创建多个
ref对象,其value值指向另一个对象中指定的属性
- 写法
setup() {let person = reactive({name: "张三",age: 19,});return {...toRefs(person),};},- 作用
- 将某个响应式对象的全部属性提供给外部使用
多层嵌套的组价间的通讯—provide和inject
简介:详解provide和inject
- 作用
- 实现祖孙组件间的传值
- 写法
- 祖组件使用
provide提供数据
let name = ref("课堂");provide("xd", name);- 后代组件使用
inject使用数据
const message = inject("xd");
















