Vue3新特性和使用方法系统总结(一)

简介: Vue3新特性和使用方法系统总结

1.vue3带来的新变化(加+)


新的名词:Composition API(组合式API)

这是重点,它提供新的写代码的方式

 三个点:

1.1 性能提升

首次渲染更快,diff算法更快,内存占用更少,打包体积更小

1.2 更好的Typescript支持(在vue下写TS更方便了)

1.3 提供新的写代码的方式:Composition API

2.移除vue2中的某些语法(减-)


vue3.0兼容大部分2.0版本(之前是怎么写的,现在也正常写),但是也有一些破坏性的语法更新

2.1 移除了$on方法 (eventBus现有实现模式不再支持,可以使用三方插件替代)

2.2 移除过滤器选项 (插值表达式里不能再使用过滤器filter, 可以使用methods替代)

2.3 移除 .sync语法(v-bind时不能使用.sync修饰符了,现在它v-model语法合并了)

3.目录变化


主要看三个文件位置的变化:(不重要,了解即可)

3.1 package.json文件中,版本变成3.0

"dependencies": {
    "core-js": "^3.6.5",
    "vue": "^3.0.0"
}

3.2 main.js文件中的变化

import { createApp } from 'vue'  +++
import App from './App.vue' // 根组件        之前是new Vue的形式
createApp(App).mount('#app')     +++

3.3 app.vue  中的变化

vue3.0的单文件组件中不再强制要求必须有唯一根元素(之前都被div包裹)

<template>
  <img alt="Vue logo" src="./assets/logo.png">
  <HelloWorld msg="Welcome to Your Vue.js App"/>
  <外面不用div标签包括了,可以一直写同级标签,更加随意了>
</template>

上面是开胃菜,重点是下面的东西

4.组合式API和选项式API的区别


vue2中的叫选项式API(options),vue3中的叫组合式API(Composition API )

这里也是介绍,了解即可

options API(Vue2)特点:

比如数据就写到data选项中,方法就写到methods中…

composition API(Vue3) 特点:

是特定功能相关的所有东西都放到一起维护,比如功能A相关的变量和方法放到一起

vue3有点像js,对功能做了封装。不停的封装函数,不停的引用

image.png

4.1 优缺点小结:

Vue2选项式API(option api):

优点:简单,各选项各司其职;

缺点:不方便功能复用;功能代码分散维护代码横跳

Vue3组合式API(composition api)

优点:

功能代码组合维护, 方便功能复用

4.2 Vue3组合式API(composition api) 【重点】

按照功能划分,在setup函数中写,每个功能里面变量和函数可以写在一起,如果功能扎堆代码量很大怎么办?拆解setup中的功能代码成一个一个函数

步骤:1.我们可以在.js文件定义方法,也可以在script标签里面写功能函数。

          2. 然后在setup函数中调用

          3.可以使用解构赋值的方式将函数里面的方法和变量取出来使用

注意:函数是一个独立的作用域,函数之间的变量互不干扰。

<script>
位置:<script>和export default之间。当然写在别的.js文件中也行
步骤1:定义函数,写逻辑(看位置,我是在这里写的,最后记得return出去)
function useShow() {
  function show() {
    showDivFlag.value = true
  }
  function hide() {
    showDivFlag.value = false
  }
//步骤1:将里面的函数和变量return出去,好给setup里面使用
  return { showDivFlag, show, hide } 
}
export default {
  name: 'App',
  setup() {
    // 功能一
    //步骤2 引入步骤1写的函数,并解构
    const { showDivFlag, show, hide } = useShow()  
    return { showDivFlag, show, hide, fontColor, changeRed, changeBlue }
  }      //步骤3:return 函数或者变量,目的是给模板使用
}
</script>

小结:我们通过定义功能函数,把两个功能相关的代码各自抽离到一个独立的小函数中,然后通过在setup函数中再把两个小功能函数组合起来,这样一来,我们既可以把setup函数变得清爽,又可以方便维护快速定位功能位置。

5.组合API-setup函数


5.1 特点:

setup 函数是一个新的组件选项,作为组件中组合式API 的起点(类比data的作用)

setup 中不能使用 this, this 指向 undefined(这个哥们执行时机太快了)

setup函数只会在组件初始化的时候执行一次

setup函数在beforeCreate生命周期钩子执行之前执行(执行时机)

5.2 参数

第1个参数为props。props为一个对象,内部包含了父组件传递过来的所有prop数据

第2个参数为一个对象context。context对象包含了attrs,slots, emit属性

如:子传父原来的写法是this.$(emit),而这里就不行了,因为this指向underfined

正确的写法 :context.emit(),当然也可把参数解构赋值setup(props,{emit})

setup(props, context) {
    console.log(props)
    context.emit('XXX',值) //注意格式,不能用this了
    return{XX}
}

5.3 返回值

setup()返回一个对象,如果在data()中也定义了同名的数据,则以setup()中为准。

5.4 小结

1.setup的执行时机?           比beforeCreate先执行

2. setup内部可以通过this访问到组件吗?            不能 结果是underfined

3. 它的返回值格式是?               对象

6 . 组合API-生命周期


vue2是8个,而vue3只有7个,将前面两个变成了setup

 `setup`            创建实例前
 `onBeforeMount`    挂载DOM前
 `onMounted`        挂载DOM后
 `onBeforeUpdate`   更新组件前
 `onUpdated`        更新组件后
 `onBeforeUnmount`  卸载销毁前
 `onUnmounted`      卸载销毁后

小结:1.组合API(vue3)的生命周期钩子有7个,它们都是回调函数的格式。可以多次使用同一个钩子,执行顺序和书写顺序相同

           2.不建议vue2, vue3混合使用

7.组合API-ref函数


问题:在seup中的返回的数据不是响应式的

作用:使用ref函数定义响应式数据

使用步骤:

  1. 从vue框架中导入ref函数
  2. 在setup函数中调用ref函数并传入数据(简单类型或者复杂类型)
  3. 在setup函数中把ref函数调用完毕的返回值以对象的形式返回出去
<template>
  公司:{{company}} //步骤4,在模板中使用
</template>
<script>
import { ref } from 'vue'  // 步骤1.引入ref
export default {
  setup () {
    // 步骤2.定义响应式对象
    const company = ref('DiDi')
   // 在代码中修改(或者获取)值时,需要补上.value
      salary.value *= 2
    return { company } //步骤3,导出数据
  }
}
</script>

小结:ref函数,用来定义响应式数据 ,在代码中修改(或者获取)值的时,需要补上.value ,模板中使用不需要加.value

8.组合API-ref属性(注意上面是函数,这里是属性)


问题:如何获取子组件(DOM)的引用?

作用:掌握使用ref属性绑定DOM或组件

步骤:

  1. 导入ref函数
  2. 使用ref函数传入null创建 ref对象 => const hRef = ref(null)【固定格式】
  3. setup中导出
  4. 模板中使用ref绑定
<template>
  <div class="container">
    <div ref="dom">我是box</div>
    <button @click="hClick"></button> // 步骤四:模板中使用
  </div>
</template>
<script>
import { onMounted, ref } from 'vue' //步骤1:导入ref函数
export default {
  name: 'App',
  setup () {
    // 步骤二:使用ref函数传入null创建ref对象
    const dom = ref(null)
    const hClick(()=>{
       console.log(dom.value)
    })
    return {dom, hClick}  //步骤三:导出
  }
}
</script>

小结:先导入ref,再申明ref响应式数据,返回给模板使用,通过ref绑定数据

相关文章
|
3月前
|
JavaScript 前端开发 安全
Vue 3
Vue 3以组合式API、Proxy响应式系统和全面TypeScript支持,重构前端开发范式。性能优化与生态协同并进,兼顾易用性与工程化,引领Web开发迈向高效、可维护的新纪元。(238字)
624 139
|
3月前
|
缓存 JavaScript 算法
Vue 3性能优化
Vue 3 通过 Proxy 和编译优化提升性能,但仍需遵循最佳实践。合理使用 v-if、key、computed,避免深度监听,利用懒加载与虚拟列表,结合打包优化,方可充分发挥其性能优势。(239字)
293 1
|
4月前
|
开发工具 iOS开发 MacOS
基于Vite7.1+Vue3+Pinia3+ArcoDesign网页版webos后台模板
最新版研发vite7+vue3.5+pinia3+arco-design仿macos/windows风格网页版OS系统Vite-Vue3-WebOS。
467 11
|
3月前
|
JavaScript 安全
vue3使用ts传参教程
Vue 3结合TypeScript实现组件传参,提升类型安全与开发效率。涵盖Props、Emits、v-model双向绑定及useAttrs透传属性,建议明确声明类型,保障代码质量。
333 0
|
5月前
|
缓存 前端开发 大数据
虚拟列表在Vue3中的具体应用场景有哪些?
虚拟列表在 Vue3 中通过仅渲染可视区域内容,显著提升大数据列表性能,适用于 ERP 表格、聊天界面、社交媒体、阅读器、日历及树形结构等场景,结合 `vue-virtual-scroller` 等工具可实现高效滚动与交互体验。
518 1
|
5月前
|
缓存 JavaScript UED
除了循环引用,Vue3还有哪些常见的性能优化技巧?
除了循环引用,Vue3还有哪些常见的性能优化技巧?
310 0
|
6月前
|
JavaScript
vue3循环引用自已实现
当渲染大量数据列表时,使用虚拟列表只渲染可视区域的内容,显著减少 DOM 节点数量。
147 0
|
4月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
370 2
|
3月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
339 137
|
7月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
859 0