vue3的特性预览

简介: vue3的特性预览

vue3的特性预览


据说,8月份vue3就正式发布了!

于是最近,听了大圣的关于vue3直播课,本文是简单总结以下内容

vue3的组成部分

  • runtime-dom(其核心是runtime-core)
  • reactivity(可以脱离浏览器独立使用)
  • compile-dom(其核心是compile-core)


vue3的特点

  • 性能 (⽐vue2快了2倍,proxy => defineProperty,compile-core重写)
  • 新增composition api (类似hooks)
  • 新增组件Fragment, Teleport, Suspense
  • 更加支持ts

compile-core是个啥

compile-core,其实就是将template变成js,返回vdom。

而vue3重写了compile-core。

vue3的vdom分析,核心点如下:

  • vue2无差别标记所有的节点
  • vue3动态标记节点,也就是纯静态和动态会被分别标记(一旦_createVNode传第四个参数,就是动态节点。动态节点会维护在一个数组里。且不同类型的节点会进行位运算来判定)
  • 关于diff算法:vue2使用双端比较,vue3加入了最长递增子序列

composition api是个啥

Vue Composition API的官方网址

以前data只是数据的集合,改数据的话,需要用methods。

而composition就是将数据和修改数据放在一块~~

  • composition =  @vue/reactivity + 生命周期
  • setup可以将相同的东西 放在一块,比如修改某些变量,不用在data methods watch 上下横跳
  • 同时可以将mixin也换成普通的function
  • @vue/reactivity是响应式的插件,独立于vue,可以在非浏览器中使用,关键方法ref,effect,computed,watchEffect,以下是在node中使用
// node里独立使用reactivity
// https://github.com/shengxinjing/vue3-vs-vue2/blob/master/workshop/node-reactivity/server.js
const {ref, computed,effect} = require('@vue/reactivity')
let count = ref(1)
setInterval(()=>{
  count.value++
},1000)
// let double = computed(()=> count.value*2)
effect(()=>{
  console.log('count is',count.value)
})

Fragment, Teleport, Suspense是个啥

  • Fragment就是以后vue组件的template不需要一个根节点了
  • Teleport就是可以渲染vue的组件内容,到指定的dom节点,做弹窗比较有用。因为弹窗需要渲染到最外层body下面,否则嵌套过多,蒙层可能会被父元素的transform影响
  • suspend就是异步组件,可以用于加载的时候
<!-- Fragment -->
<template>
    <h1>哈喽</h1>
    <div>我真棒</div>
</template>
<!-- Teleport -->
  <!-- 现有一个html文件 -->
  <body>
    <div id="app"></div>
    <div id="foot-container"> </div>
    <script type="module" src="/src/main.js"></script>
  </body>
  <!-- 写组件的时候 -->
  <template>
  <div class="confirm-modal">
      <button @click="isOpen = true">打开</button>
      <!-- 注意这一块代码 -->
      <Teleport to="#foot-container">
          <div v-if="isOpen">
            <p>底部信息底部信息底部信息底部信息底部信息底部信息</p>
            <button @click="isOpen = false">取消</button>
          </div>
      </Teleport>
  </div>
  </template>
  <script>
  import {ref} from 'vue'
  export default {
      setup(){
          const isOpen = ref(false)
          return {isOpen}
      }
  }
  </script>
<!--  Suspense -->
  <!-- 随便来个普通的组件 -->
<template>
  <h1>一个异步小组件</h1>
</template>
<script>
  function sleep(timeout) {
    return new Promise(resolve => setTimeout(resolve, timeout));
  }
  export default {
    name: "AsyncComponent",
    props: {
      timeout: {
        type: Number,
        required: true
      }
    },
    async setup(props) {
      await sleep(props.timeout);
    }
  };
  </script>
  <!-- 使用的时候 -->
<template>
  <h1>Supense</h1>
  <Suspense>
    <template #default>
      <AsyncComponent :timeout="3000" />
    </template>
    <template #fallback>
      <h1>加载中</h1>
    </template>
  </Suspense>
</template>
<script>
import AsyncComponent from './AsyncComponent.vue'
export default {
  components:{
    AsyncComponent
  }
}
</script>

vite可能取代webpack

vite是用于在开发的时候替换webpack的工具,热更新速度贼快。

最大的亮点是利用浏览器自带的import功能,只解析,不打包

手写实现一个迷你vite

核心:

  • 路径转化
  • @vue/compiler-sfc => 解析vue文件
  • @vue/compiler-dom => 解析vue文件的html部分
  • 支持css或者其他类型的,本质上就是一个相应的loader

模板的发展史 -- vdom的由来

  • $('xx').html(xx)
  • underscore-字符串,
  • vdom实现按需更新:
  • vdom的简单的代码实现:
  • 这里涉及到编译原理,有空看看这个最小的编译器,the-super-tiny-compiler,中文版

其他资源

  • ts的语法

大圣的各种账号,可以关注看看

目录
相关文章
|
2天前
|
移动开发 JavaScript 前端开发
💻揭秘!如何用 Vue 3 实现酷炫的色彩魔方游戏✨
本文分享了开发基于Canvas技术的小游戏"色彩魔方挑战"的完整过程。游戏旨在考验玩家的观察力和耐心,通过随机生成的颜色矩阵和一个变化点,玩家需在两幅画布中找出不同的颜色点。文章详细讲解了游戏的核心功能,包括随机颜色矩阵生成、点的闪烁提示、自定义配色方案等。此外,作者展示了使用Vue 3和TypeScript开发的代码实现,带领读者一步步深入了解游戏的逻辑与细节。
103 68
|
1天前
|
JavaScript 前端开发 算法
对比一下Vue2 和 Vue3?—— 8个方面给你答案
本文介绍了 Vue 和 React 的起源、核心思想、表现形式、API 差异、社区差异、升级方向、响应式原理、Diff 算法、事件机制,并进行了总结。Vue 以其渐进式框架设计和简洁性著称,而 React 则强调单向数据流和灵活性。两者均支持组件化开发和虚拟 DOM,适用于不同的开发场景。
10 0
对比一下Vue2 和 Vue3?—— 8个方面给你答案
|
1天前
|
存储 前端开发 中间件
vue3之vite配置vite-plugin-mock使用mock轻松创建模拟数据提高开发效率
vue3之vite配置vite-plugin-mock使用mock轻松创建模拟数据提高开发效率
13 0
|
1天前
|
API
vue3中父子组件的双向绑定defineModel详细使用方法
vue3中父子组件的双向绑定defineModel详细使用方法
9 0
|
1天前
|
JavaScript 前端开发 API
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
35 0
|
1天前
|
存储 缓存 资源调度
Vue3状态管理新选择:Pinia安装与使用详解,以及与Vuex的对比分析
Vue3状态管理新选择:Pinia安装与使用详解,以及与Vuex的对比分析
12 0
|
1天前
|
JavaScript iOS开发
用上Vue3,你真的变了吗?
10月更文挑战第6天
9 0
|
1天前
|
缓存 JavaScript 前端开发
Vue 中动态导入的注意事项
【10月更文挑战第12天】 在 Vue 项目中,动态导入是一种常用的按需加载模块的技术,可以提升应用性能和效率。本文详细探讨了动态导入的基本原理及注意事项,包括模块路径的正确性、依赖关系、加载时机、错误处理、缓存问题和兼容性等,并通过具体案例分析和解决方案,帮助开发者更好地应用动态导入技术。
|
1天前
|
JavaScript API
vue 批量自动引入并注册组件或路由等等
【10月更文挑战第12天】 vue 批量自动引入并注册组件或路由等等
|
1天前
|
JavaScript 算法 前端开发
深入剖析Vue中v-for的使用及index作为key的弊端
深入剖析Vue中v-for的使用及index作为key的弊端
8 2