react & vue & angular

Vue3快速上手(尚硅谷张天禹-课件-部分修改)

2022-04-13  本文已影响0人  Spinach

Vue2学习笔记

Vue3快速上手

vue3

1.Vue3简介

2.Vue3带来了什么

1.性能的提升

2.源码的升级

3.拥抱TypeScript

4.新的特性

  1. Composition API(组合API)

    • setup配置
    • ref与reactive
    • watch与watchEffect
    • provide与inject
    • ......
      watch只追踪明确监听的属性,其中被调用的其他属性发生变化并不会触发。且watch加载时不会被调用,只有依赖的属性发生变化才会被调用。
      watchEffect不指明依赖的变量,依赖关系不明确,只要其中被调用的其他属性发生变化就会触发。
      如以下代码,count或者 title发生变化,watchEffect里的内容都会被打印到控制台
const count = ref(1)
const title = ref('hello')
const doubleCount = computed(()=>count.value*2)
watchEffect(()=>{
  console.log(count .value)
  console.log(title.value)
})
  1. 新的内置组件

    • Fragment
    • Teleport
    • Suspense
  2. 其他改变

    • 新的生命周期钩子
    • data 选项应始终被声明为一个函数
    • 移除keyCode支持作为 v-on 的修饰符
    • ......

一、创建Vue3.0工程

1.使用 vue-cli 创建

官方文档:https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create

## 查看@vue/cli版本,确保@vue/cli版本在4.5.0以上
vue --version
## 安装或者升级你的@vue/cli
npm install -g @vue/cli
## 创建
vue create vue_test
## 启动
cd vue_test
npm run serve

2.使用 vite 创建

官方文档:https://v3.cn.vuejs.org/guide/installation.html#vite

vite官网:https://vitejs.cn

## 创建工程
npm init vite-app <project-name>
## 进入工程目录
cd <project-name>
## 安装依赖
npm install
## 运行
npm run dev

3. vue2项目与vue3项目的工程结构比较

1、在main.js中vue3引入的不再是Vue构造函数,而是一个名为createApp的工厂函数。

//import Vue from 'vue'//vue2:调用时通过new关键字调用
import {createApp} from 'vue'//vue3:直接调用
import App from './App.vue'
createApp(App).mount('#app')//Vue3写法
//上一条代码解析:创建应用实例对象-app(类似于之前vue2中的vm,但是app比vm更轻,属性和方法较少)
/*const app = createApp(App)
//挂载
app.mount('#app')
*/
//vue2写法
/*const vm = new Vue({
    el:'#app',
    render:h=>h(App)
})
vm.$mount('#app')
*/

注意:vue3项目下main.js文件中写法不兼容vue2的写法
2、组件区别:vue3可以没有根标签,vue2有且仅有一个根标签
3、开发工具的区别:vue3有独有的开发工具(图标有下标'beta')

二、常用 Composition API(组合式API)

官方文档: https://v3.cn.vuejs.org/guide/composition-api-introduction.html

1.拉开序幕的setup

  1. 理解:setup是Vue3.0中一个新的配置项,值为一个函数。
  2. setup是所有Composition API(组合API)“ 表演的舞台 ”
  3. 组件中所用到的:数据、方法等等,均要配置在setup中。
  4. setup函数的两种返回值:
    1. 若返回一个对象,则对象中的属性、方法, 在模板中均可以直接使用。(常用,重点关注!)
      2.若返回一个渲染函数(需要手动引入):则可以自定义渲染内容。(了解)
      import {h} from 'vue` //... setup(){ //... return ()=>{return h(...)} }
  5. 注意点:
    1. 尽量不要与Vue2.x配置混用
      • Vue2.x配置(data、methos、computed...)中可以访问到setup中的属性、方法。
      • 但在setup中不能访问到Vue2.x配置(data、methos、computed...)。
      • 如果有重名, setup优先。
    2. setup不能是一个async函数,因为返回值不再是return的对象, 而是promise, 模板看不到return对象中的属性。(后期也可以返回一个Promise实例,但需要Suspense和异步组件的配合)

2.ref函数

3.reactive函数

4.Vue3.0中的响应式原理

vue2.x的响应式

vue2响应式存在的问题及解决方案

Vue3.0的响应式

5.reactive对比ref

6.setup的两个注意点

7.计算属性与监视

1.computed函数

2.watch函数

总结:监视ref定义的数据时,直接监视,第一个参数是监视的数据(情况1+2);监视reactive定义的数据时,第一个参数是\color{#FF0000}{带返回值的函数}且deep默认打开无法关闭,监视对象中的对象,开启deep。
注意:watchref定义的变量时是否需要.value
基本类型:不需要(.value就变成监视具体的值,报错)
引用类型:可以.value也可以开启深度监视deep:true(但引用类型一般用reactive定义)。

3.watchEffect函数

8.生命周期

vue2.x的生命周期:
[图片上传失败...(image-d8ad27-1650959268445)]
vue3.x的生命周期:
[图片上传失败...(image-b53d78-1650959268445)]

9.自定义hook函数

10.toRef

三、其它 Composition API

1.shallowReactive 与 shallowRef

2.readonly 与 shallowReadonly

3.toRaw 与 markRaw

4.customRef

customRfm
e.g. 修改keyword ,过一会响应(- 实现防抖效果:)
防抖:当用户连续输入时,等用户输入结束后一次性响应结果
<template>
  <input type="text" v-model="keyword">
  <h3>{{keyword}}</h3>
</template>

<script>
  import {ref,customRef} from 'vue'
  export default {
      name:'Demo',
      setup(){
          // let keyword = ref('hello') //使用Vue准备好的内置ref
          //自定义一个myRef,value:传递的参数,delay:延迟
          function myRef(value,delay){
              let timer;
              //通过customRef去实现自定义
              return customRef((track,trigger)=>{
                                    //track:追踪     trigger:通知vue重新解析模板
                  return{
                      get(){//读取MyRef中数据时调用
                          track() //通知Vue追踪value的变化
                          return value//给啥返回啥
                      },
                       set(newValue){//修改MyRef中数据时调用,newValue:修改后的值
                          clearTimeout(timer)//如果之前有定时器,就清除(防抖)
                          timer = setTimeout(()=>{
                              value = newValue
                              trigger() //告诉Vue去更新界面
                          },delay)
                      }
                  }
              })
          }
          let keyword = myRef('hello',500) //使用程序员自定义的ref
          return {
              keyword
          }
      }
  }
</script>

5.provide 与 inject

provide:提供(数据)
inject:注入(数据)


provide 与 inject

6.响应式数据的判断

四、Composition API 的优势

1.Options API 存在的问题

使用传统OptionsAPI中,新增或者修改一个需求,就需要分别在data,methods,computed里修改 。


image.png 111.gif 222.gif

2.Composition API 的优势

我们可以更加优雅的组织我们的代码,函数。让相关功能的代码更加有序的组织在一起。


333.gif
444.gif

五、新的组件

1.Fragment

2.Teleport

3.Suspense

Suspense底层原理:插槽slot

六、其他

1.全局API的转移

2.其他改变

上一篇下一篇

猜你喜欢

热点阅读