学习二十三、Vue 3.0 学习笔记

Vue3.0

  • 源码组织方式的变化

    • 全部采取 TypeScript 的方式编写代码

    • 使用 Monorepo 管理项目结构

    • 功能模块全部拆分为单独的包来进行开发,可以单独开发,测试,发布

  • Composition API

    90%的新 API 兼容 2.X

  • 性能提升

    大幅度提升,重写响应式,运用 proxy,服务端渲染的性能提高 2-3 倍

  • Vite

    不需要打包直接运行项目的解决方案

不同的构建版本

  • cjs

    扫描二维码关注公众号,回复: 12396742 查看本文章
    • vue.cjs.js

    • vue.cjs.prod.js

  • global

    • vue.global.js

    • vue.global.prod.js

    • vue.runtime.global.js

    • vue.runtime.global.prod.js

  • browser

    • vue.esm-browser.js

    • vue.esm-browser.prod.js

    • vue.runtime.esm-browser.js

    • vue.runtime.esm-browser.prod.js

  • bundler

    • vue.esm-bundler.js

    • vue.runtime.esm-bundler.js

性能提升

  • 响应式系统升级

  • 编译优化

  • 源码体积的优化

  • Vue.js 2.x 中响应式系统的核心 defineProperty

  • Vue.js 3.0 中使用 Proxy 对象重写响应式系统

    • 可以监听动态新增的属性

    • 可以监听删除的属性

    • 可以监听数组的索引和 length 属性

  • Vue.js 2.x 中通过标记静态根节点,优化 diff 的过程

  • Vue.js 3.0 中标记和提升所有的静态根节点,diff 的时候只需要对比动态节点内容

    • Fragments(升级 vetur 插件)

    • 静态提升

    • Patch flag

    • 缓存事件处理函数

  • 优化打包体积

    • Vue.js 3.0 中移除了一些不常用的 API

      • 例如:inline-template、filter 等
    • 支持 Tree-shaking

Vue.3.0js 响应式回顾

  • Proxy 对象实现属性监听

  • 多层属性嵌套,在访问属性过程中处理下一级属性默认监听动态添加的属性

  • 默认监听属性的删除操作

  • 默认监听数组索引和 length 属性

  • 可以作为单独的模块使用

  • 核心方法:

      - 主要依赖于 Proxy 对象,创建拦截器 handler, 设置 get/set/deleteProperty 实现属性监听
    
      - reactive 实现对象的监听
    
      - ref 实现基础数据类型的监听
    
      - toRefs 实现对象属性的监听
    
      - computed 实现计算属性 
    
      - effect 定义副作用函数
    
      - track 实现依赖收集
    
      - trigger 触发响应式
    
      - receiver 为当前的 proxy 对象 或者 继承 proxy 的对象
    
      - 响应式的过程中会将 监听的对象 存储在一个 targetMap(weakMap) 中,他的值是对应的响应式的集合,存放在 depsMap(Map) 中, dep 的值是一个 Set 集合,
    
      存储了对应的 effect,触发时只需要遍历 dep 即可。
    

Composition API

  • RFC(Request For Comments)

    • https://github.com/vuejs/rfcs·Composition
  • API RFC

    • https://composition-api.vuejs.org
  • 设计动机

    • Options API

      • 包含一个描述组件选项(data、methods、props 等)的对象

      • Options API 开发复杂组件,同一个功能逻辑的代码被拆分到不同选项

    • Composition API

      • Vue.js 3.0 新增的一组 API

      • 一组基于函数的 API

      • 可以更灵活的组织组件的逻辑

createApp

  • 用于创建 Vue 对象

setup

  • Composition API 的入口

reactive

  • 创建响应式对象

toRefs

  • 遍历代理对象,让代理对象的属性都变成响应式的

ref

  • 创建一个基础数据类型的响应式对象

watch

  • Watch 的三个参数

    • 第一个参数:要监听的数据

    • 第二个参数:监听到数据变化后执行的函数,这个函数有两个参数分别是新值和旧值

    • 第三个参数:选项对象,deep 和 immediate

  • watch 的返回值

    • 取消监听的函数

watchEffect

  • 是 watch 函数的简化版本,也用来监视数据的变化

  • 接收一个函数作为参数,监听函数内响应式数据的变化

自定义指令

  • Vue 2.x

Vue.directive("editingFocus", {
    
    

  bind(el, binding, vnode, prevVnode) {
    
    },

  inserted() {
    
    },

  update() {
    
    },

  componentUpdated() {
    
    },

  unbind() {
    
    },

});



Vue.directive("editingFocus", (el, binding) => {
    
    

  binding.value && el.focus();

});

  • Vue 3.0

app.directive("editingFocus", {
    
    

  beforeMount(el, binding, vnode, prevVnode) {
    
    },

  mounted() {
    
    },

  beforeUpdate() {
    
    },

  updated() {
    
    },

  beforeUnmount() {
    
    },

  unmounted() {
    
    },

});



app.directive("editingFocus", (el, binding) => {
    
    

  binding.value && el.focus();

});

猜你喜欢

转载自blog.csdn.net/qq_40289624/article/details/111224681
今日推荐