我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue3.0新特性怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue3.0新特性怎么使用

本篇内容主要讲解“Vue3.0新特性怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue3.0新特性怎么使用”吧!

Vue3.0新特性怎么使用

1、Vue3带来的新变化

  1. 性能提升(零成本:从vue2切到vue3就享受到)

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

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

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

2、这些Vue2.0的语法不能用了

vue3.0对于2.0版本的大部分语法都是可以兼容的(之前是怎么写的,现在也正常写),但是也有一些破坏性的语法更新,这个要格外注意:

移除了vue实例上的$on方法 (eventBusVue.prototype.$eventBus=new Vue(); this.$on('事件名', 回调)现有实现模式不再支持,可以使用三方插件替代)。下边是vue2中eventBus的用法:

Vue.prototype.$eventBus = new Vue()组件1this.$on('事件名', 回调)组件2this.$emit('事件名')

移除过滤器选项 。下边是vue2中过滤器的用法:

<p>{{ msg | format}}</p>插值表达式里, 不能再使用过滤器filter, 可以使用methods替代{{format(msg)}}

移除 .sync语法(v-bind时不能使用.sync修饰符了,现在它v-model语法合并了)。下面是vue2中.sync的用法

<el-dialog :visibel.sync="showDialog"/>

3、vue2和3的项目区别

主要看三个位置:

  1. package.json

  2. main.js

  3. app.vue

package.json

首先我们可以看一下package.json文件,在dependencies配置项中显示,我们当前使用的版本为3

"dependencies": {    "core-js": "^3.6.5",    "vue": "^3.2.25"  // 版本号}

main.js

然后打开main.js 入口文件,发现Vue的实例化发生了一些变化,由先前的new关键词实例化,转变为createApp方法的调用形式 。

vue2.x中的写法:

import Vue from 'vue'import App from './App.vue'new Vue({render: h => h(App)}).$mount('#app')

vue3.x的写法:

import { createApp } from 'vue'import App from './App.vue' // 根组件createApp(App).mount('#app')

app.vue

打开app.vue发现:vue3.0的单文件组件中不再强制要求必须有唯一根元素

<template>  <img alt="Vue logo" class="lazy" data-src="./assets/logo.png">  <HelloWorld msg="Welcome to Your Vue.js App"/></template>

4、组合式API和选项式API

组合式api(Composition API)是vue3对我们开发者来说变化非常大的更新。

Vue2 选项式API,options API (如图) ,  Vue3 组合式API, composition API (右图):

Vue3.0新特性怎么使用                           Vue3.0新特性怎么使用

Vue2 选项式API,options API:

优点:

理解容易,好上手。因为各个选项(配置项)都有固定的书写位置(比如数据就写到data选项中,操作方法就写到methods中,等等)

缺点:

应用大了之后,相信大家都遇到过来回上下找代码的困境-----横跳。

Vue3 组合式API, composition API :

特点:

  • 特定功能相关的所有东西都放到一起维护,比如功能A相关的响应式数据,操作数据的方法等放到一起,这样不管应用多大,都可以快速定位到某个功能的所有相关代码,维护方便设置

  • 如果功能复杂,代码量大,我们还可以进行逻辑拆分处理。

Vue3.0新特性怎么使用                  Vue3.0新特性怎么使用

总结:

组合式API的由来。由于vue3中提供了一个新的写代码的方式(老方式也是可以使用的),为了区别vue2,给他们各自取了不同的名字:

Vue2选项式API(option api) 优点:简单,各选项各司其职;缺点:不方便功能复用;功能代码分散维护代码横跳

Vue3组合式API(composition api) 优点:功能代码组合维护, 方便功能复用;

4、setup

  1. setup 函数是一个新的组件选项,作为组件中组合式API 的起点(入口)

  2. setup 中不能使用 this, this 指向 undefined

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

  4. setup函数在beforeCreate生命周期钩子执行之前执行

setup() {console.log('setup....', this)},beforeCreate() {console.log('beforeCreate') // 它比setup迟}

setup 参数:

使用setup 时,它接受两个参数:

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

  2. context: context对象包含了attrs,slots, emit属性

返回值

这个函数的返回值是一个对象,在模版中需要使用的数据和函数,需要在这个对象中声明(如果在data()中也定义了同名的数据,则以setup()中为准)。

<template>  <p class="container">    姓名:{{name}},月薪:{{salary}} <button @click="say">打个招呼</button>  </p></template><script>export default {  setup () {    console.log('setup执行了,这里没有this. this的值是:', this)    // 定义数据和函数    const name = '小吴'    const salary = 18000    const say = () => {      console.log('我是', name)    }    // 返回对象,给视图使用    return { msg , say}  },  beforeCreate() {    console.log('beforeCreate执行了, 这里有this,this的值是:',  this)  }}</script>

setup 中接受的props是响应式的, 当传入新的 props 时,会及时被更新。由于是响应式的, 所以不可以使用 ES6 解构,解构会消除它的响应式。 错误代码示例, 这段代码会让 props 不再支持响应式:

export default com ({    setup(props, context) {        const { uname } = props        console.log(uname)    },})

开发中我们想要使用解构,还能保持props的响应式,有没有办法解决呢?setup接受的第二个参数context,我们前面说了setup中不能访问 Vue2 中最常用的this对象,所以context中就提供了this中最常用的三个属性:attrs、slot 和emit,分别对应 Vue2.x 中的 $attrs属性、slot 插槽 和$emit发射事件。并且这几个属性都是自动同步最新的值,所以我们每次使用拿到的都是最新值。

5、reactive、ref 与 toRefs

在 vue2.x 中, 定义数据都是在data中, 但是 Vue3.x 可以使用 reactive 和 ref 来进行数据定义。

如何取舍ref和reactive?

定义响应式数据有两种方式:

  • ref函数(可以处理简单数据,也可以处理复杂数据),常用于将简单数据类型定义为响应式数据

    • 在代码中修改(或者获取)值时,需要补上.value

    • 在模板中使用时,可以省略.value

  • reactive函数,常用于将复杂数据类型为响应式数据

推荐用法:

  1. 优先使用ref

  2. 如果明确知道对象中有什么属性,就使用reactive。例如,表单数据

接下来使用代码展示一下 ref、reactive的使用:

<template>  <p class="container">    <p>{{ num }}</p>    <p>姓名: {{ user.uname }}</p>    <p>年龄: {{ user.age }}</p>  </p></template><script>import { reactive, ref, toRefs } from "vue";export default com({  setup() {    const num = ref(0);    const user = reactive({ uname: "vivian", age: 18});    setInterval(() => {      num.value++;      user.age++;    }, 1000);    return {      year,      user    };  },});</script>

上面的代码中,我们绑定到页面是通过user.uname,user.age这样写感觉很繁琐,我们能不能直接将user中的属性解构出来使用呢? 答案是不能直接对user进行结构,这样会消除它的响应式,这里就和上面我们说props不能使用 ES6 直接解构就呼应上了。那我们就想使用解构后的数据怎么办,解决办法就是使用toRefs,定义转换响应式中所有属性为响应式数据,通常用于解构|展开reactive定义对象, 简化我们在模板中的使用。

格式:

// 响应式数据:{ 属性1, 属性2 }let { 属性1, 属性2 } = toRefs(响应式数据)

具体使用方式如下:

<template>  <p class="container">    <p>{{ num }}</p>    <p>姓名: {{ uname }}</p>    <p>年龄: {{ age }}</p>  </p></template><script>import { defineComponent, reactive, ref, toRefs } from "vue";export default com({  setup() {    const num = ref(0);    const user = reactive({ uname: "vivian", age: 18});    setInterval(() => {      num.value++;      user.age++;    }, 1000);    return {      year,      // 使用reRefs      ...toRefs(user),    };  },});</script>

增强版的结构赋值:在解构对象的同时,保留响应式的特点。

6、vue3.0生命周期钩子函数

  • setup创建实例前

  • onBeforeMount挂载DOM前

  • onMount挂载DOM后

  • BeforeUpdate 更新组件前

  • updated 更新组件后

  • onBeforeUnmount卸载销毁前

  • onUnmount 卸载销毁后

setup () {    onBeforeMount(()=>{      console.log('DOM渲染前',document.querySelector('.container'))    })    onMounted(()=>{      console.log('DOM渲染后1',document.querySelector('.container'))    })  }

Vue3.x 还新增用于调试的钩子函数onRenderTriggered和onRenderTricked,  另外,Vue3.x 中的钩子是需要从 vue 中导入的:

import { defineComponent, onBeforeMount, onMounted, onBeforeUpdate,onUpdated,onBeforeUnmount, onUnmounted, onErrorCaptured, onRenderTracked,onRenderTriggered } from "vue"; export default defineComponent({ //beforeCreate和created是vue2的 beforeCreate() {console.log("--beforeCreate--") }, created() {console.log("--created--") }, setup() { console.log("--setup--")// vue3.x生命周期写在setup中 onBeforeMount(() => {console.log("--onBeforeMount--")})onMounted(() => {console.log("--onMounted--"); }) // 调试哪些数据发生了变化onRenderTriggered((event) =>{ console.log("--onRenderTriggered--",event)}) }, });

7、computed函数定义计算属性

格式:

import { computed } from 'vue'const 计算属性名 = computed(() => {  return 相关计算结果})

代码示例:

<template>  <p>姓名:{{name}}, 公司:{{company}}, 月薪:{{salary}}, 年薪{{total}}</p>  <button @click="double">月薪double</button></template><script>import { ref, computed } from 'vue'export default {  name: 'App',  setup () {    // 定义响应式对象    const company = ref('DiDi')    const name = ref('小王')    const salary = ref(18000)    const double = () => {      salary.value *= 2 // ref数据要加.value    }    // 定义计算属性    const total = computed(() => 12 * salary.value)        return {        name,       company,      total,      salary,      double    }  }}</script>

总结:

vue3中的computed函数与vue2中的computed选项功能类似。

computed的入参是一个函数

作用:根据已有数据,产生新的响应式数据。

步骤:导入,定义,导出

computed的高级用法:

格式:

const 计算属性 =  computed({  get () {    // 当获取值自动调用  },  set (val) {    // 当设置值自动调用,val会自动传入  }})

示例代码:

<template>  <p style="padding:2em">    <p>小花, 月薪:{{salary}}, 年薪:{{total}}</p>    <p>年薪:<input v-model="total"/></p>    <button @click="double">月薪double</button>  </p></template><script>// reactive: 是除了ref之外的第二种申明响应式数据的方式import { ref, computed } from 'vue'export default {  setup () {      const salary = ref(18000)         const double = () => {      salary.value *= 2      console.log(salary)    }    // 定义计算属性: 普通的写法:只使用了get    // const total = computed(() => {    //   return stu.salary * 12    // })    // 定义计算属性: 高阶的写法:使用了get + set    const total = computed({      get() { return salary.value * 12 },      set(val) {         // 设置计算属性的值,会自动调用,并传入val        console.log('要设置的值...', val)        salary.value = val/12      }    })        return { double, salary, total}  }}</script>

总结:

计算属性两种用法

  1. 给computed传入函数,返回值就是计算属性的值

  2. 给computed传入对象,get获取计算属性的值,set监听计算属性改变

  3. 在v-model绑定计算属性: <input v-model="total" />

8、watch函数

基于响应式数据的变化执行回调逻辑,和vue2中的watch的应用场景完全一致。

步骤:

  1. 导入 import { watch } from 'vue'

  2. 开启监听。在setup函数中执行watch函数开启对响应式数据的监听

  3. watch函数接收三个常规参数  watch(source, callback, [options])

    1. 第一个参数有三种取值:

      对象,要监听的响应式数据

      数组,每个元素是响应式数据

      函数,返回你要监听变化的响应式数据

    2. 第二个参数是:响应式数据变化之后要执行的回调函数

    3. 第三个参数是: 一个对象,在里面配置是否开启立刻执行或者深度监听

<template>    <p>        {{stu}}, {{salary}}        <button @click="doSome"> do</button>    </p></template><script>import { reactive, watch, ref } from 'vue'export default {    setup() {        const salary = ref(10000)        const stu  = reactive({            address: {city: 'wuhan'}        })        // 1. 侦听-单个数据        watch(salary, (newVal, oldVal) => {            console.log('监听单个数据', newVal, oldVal)        }) // 侦听-单个数据        watch(stu, (newVal, oldVal) => {            console.log('监听单个数据', newVal, oldVal)        })      // 侦听-多个数据        watch([stu, salary], (newVal, oldVal) => {            console.log('监听多个数据', newVal, oldVal)        })// 侦听对象的某个属性        watch(()=>stu.address , (newVal, oldVal) => {            console.log('第一个参数是函数', newVal, oldVal)        }, {deep: true,  immediate: true} )        // 测试按钮,修改数据        const doSome = () => {            salary.value +=1            stu.address.city = ''        }        return {stu, salary, doSome}    }}</script>

到此,相信大家对“Vue3.0新特性怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue3.0新特性怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue3.0新特性怎么使用

本篇内容主要讲解“Vue3.0新特性怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue3.0新特性怎么使用”吧!1、Vue3带来的新变化性能提升(零成本:从vue2切到vue3就享受到
2023-06-29

vue3.0中有什么新特性

这篇文章主要介绍了vue3.0中有什么新特性,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vue3.0新特性:1、节点打Tag;2、事件开缓存;3、响应式Proxy;4、Co
2023-06-14

Vue3.0的新特性有哪些呢

Vue3.0的新特性有哪些呢,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。尤大大在B站直播时分享了Vue3.0的几个亮点:Performance:性能优化Tree-shak
2023-06-22

Java8新特性怎么使用

本篇内容介绍了“Java8新特性怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java语言新特性Lambda表达式Lambda表达式
2023-06-02

es6新特性怎么使用

这篇“es6新特性怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“es6新特性怎么使用”文章吧。es6新特性有:1、l
2023-07-04

怎么使用的新Java特性

这篇文章主要讲解了“怎么使用的新Java特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用的新Java特性”吧!1 Try-with-resource 语句使用 try-catch
2023-06-15

CSS新特性content-visibility怎么使用

这篇“CSS新特性content-visibility怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“CSS新特性co
2023-07-04

Java8新特性Stream流怎么使用

本文小编为大家详细介绍“Java8新特性Stream流怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java8新特性Stream流怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Stream流的概
2023-07-02

React18新增特性released怎么使用

本文小编为大家详细介绍“React18新增特性released怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“React18新增特性released怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。新
2023-06-30

Go1.18新特性之泛型怎么使用

本篇内容主要讲解“Go1.18新特性之泛型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go1.18新特性之泛型怎么使用”吧!01 Go中的泛型是什么众所周知,Go是一门静态类型的语言。
2023-06-30

Java8并发新特性CompletableFuture怎么使用

这篇文章主要介绍“Java8并发新特性CompletableFuture怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java8并发新特性CompletableFuture怎么使用”文章能帮
2023-06-30

怎么使用Java8中接口的新特性

这篇文章主要介绍“怎么使用Java8中接口的新特性”,在日常操作中,相信很多人在怎么使用Java8中接口的新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java8中接口的新特性”的疑惑有所帮助!
2023-06-25

JDK8新特性java.util.function-Function接口怎么使用

这篇文章主要介绍“JDK8新特性java.util.function-Function接口怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JDK8新特性java.util.function-F
2023-07-05

Vue3.0中怎么使用watch

这篇文章主要讲解了“Vue3.0中怎么使用watch”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue3.0中怎么使用watch”吧!Vue3.0中使用watchwatch在Vue3.0中
2023-06-27

JDK1.4新特性断言怎么用

小编给大家分享一下JDK1.4新特性断言怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JDK1.4中引入的一个新特性之一就是断言(assert),为程序的调
2023-06-03

iOS9中collectionView新特性怎么用

这篇文章主要为大家展示了“iOS9中collectionView新特性怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS9中collectionView新特性怎么用”这篇文章吧。具体用法
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录