广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >如何快速上手Vue3
  • 379
分享到

如何快速上手Vue3

2024-04-02 19:04:59 379人浏览 八月长安
摘要

这篇文章主要讲解了“如何快速上手vue3”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速上手Vue3”吧!Vue2 与 Vue3 的对比对 types

这篇文章主要讲解了“如何快速上手vue3”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速上手Vue3”吧!

Vue2 与 Vue3 的对比

  • typescript 支持不友好(所有属性都放在了 this 对象上,难以推倒组件的数据类型)

  • 大量的 api 挂载在 Vue 对象的原型上,难以实现 TreeShaking。

  • 架构层面对跨平台 dom 渲染开发支持不友好

  • CompositionAPI。爱 ReactHook 启发

  • 更方便的支持了 jsx

  • Vue 3 的 Template 支持多个根标签,Vue 2 不支持

  • 对虚拟 DOM 进行了重写、对模板的编译进行了优化操作...

一、setup 函数

setup() 函数是 vue3 中,专门为组件提供的新属性。它为我们使用 vue3 的 Composition API 新特性提供了统一的入口,  setup 函数会在 beforeCreate 之后、created 之前执行, vue3 也是取消了这两个钩子,统一用 setup 代替,  该函数相当于一个生命周期函数,vue 中过去的 data,methods,watch 等全部都用对应的新增 api 写在 setup()函数中

setup(props, context) {     context.attrs     context.slots     context.parent     context.root     context.emit     context.refs      return {      }   }
  • props: 用来接收 props 数据

  • context 用来定义上下文, 上下文对象中包含了一些有用的属性,这些属性在 vue 2.x 中需要通过 this 才能访问到, 在 setup()  函数中无法访问到 this,是个 undefined

  • 返回值: return {}, 返回响应式数据, 模版中需要使用的函数

二、reactive 函数

reactive() 函数接收一个普通对象,返回一个响应式的数据对象, 想要使用创建的响应式数据也很简单,创建出来之后,在 setup 中 return  出去,直接在 template 中调用即可

<template>   {{name}} // test <template>  <script lang="ts"> import { defineComponent, reactive, ref, toRefs } from 'vue'; export default defineComponent({   setup(props, context) {      let state = reactive({       name: 'test'     });      return state   } }); </script>

三、ref() 函数

ref() 函数用来根据给定的值创建一个响应式的数据对象,ref() 函数调用的返回值是一个对象,这个对象上只包含一个 value 属性, 只在  setup 函数内部访问 ref 函数需要加.value

<template>     <div class="mine">         {{count}} // 10     </div> </template>  <script lang="ts"> import { defineComponent, ref } from 'vue'; export default defineComponent({   setup() {     const count = ref<number>(10)     // 在js 中获取ref 中定义的值, 需要通过value属性     console.log(count.value);     return {        count     }    } }); </script>

在 reactive 对象中访问 ref 创建的响应式数据

<template>     <div class="mine">         {{count}} -{{t}} // 10 -100     </div> </template>  <script lang="ts"> import { defineComponent, reactive, ref, toRefs } from 'vue'; export default defineComponent({   setup() {     const count = ref<number>(10)     const obj = reactive({       t: 100,       count     })     // 通过reactive 来获取ref 的值时,不需要使用.value属性     console.log(obj.count);     return {        ...toRefs(obj)     }    } }); </script>

四、isRef() 函数

isRef() 用来判断某个值是否为 ref() 创建出来的对象

<script lang="ts"> import { defineComponent, isRef, ref } from 'vue'; export default defineComponent({   setup(props, context) {     const name: string = 'vue'     const age = ref<number>(18)     console.log(isRef(age)); // true     console.log(isRef(name)); // false      return {       age,       name     }   } }); </script>

五、toRefs() 函数

toRefs() 函数可以将 reactive() 创建出来的响应式对象,转换为普通的对象,只不过,这个对象上的每个属性节点,都是 ref()  类型的响应式数据

<template>   <div class="mine">     {{name}} // test     {{age}} // 18   </div> </template>  <script lang="ts"> import { defineComponent, reactive, ref, toRefs } from 'vue'; export default defineComponent({   setup(props, context) {     let state = reactive({       name: 'test'     });      const age = ref(18)      return {       ...toRefs(state),       age     }   } }); </script>

六、computed()

该函数用来创造计算属性,和过去一样,它返回的值是一个 ref 对象。里面可以传方法,或者一个对象,对象中包含 set()、get()方法

6.1 创建只读的计算属性

import { computed, defineComponent, ref } from 'vue'; export default defineComponent({   setup(props, context) {     const age = ref(18)      // 根据 age 的值,创建一个响应式的计算属性 readOnlyAge,它会根据依赖的 ref 自动计算并返回一个新的 ref     const readOnlyAge = computed(() => age.value++) // 19      return {       age,       readOnlyAge     }   } }); </script>

6.2 通过 set()、get()方法创建一个可读可写的计算属性

<script lang="ts"> import { computed, defineComponent, ref } from 'vue'; export default defineComponent({   setup(props, context) {     const age = ref<number>(18)      const computedAge = computed({       get: () => age.value + 1,       set: value => age.value + value     })     // 为计算属性赋值的操作,会触发 set 函数, 触发 set 函数后,age 的值会被更新     age.value = 100     return {       age,       computedAge     }   } }); </script>

七、 watch() 函数

watch 函数用来侦听特定的数据源,并在回调函数中执行副作用。默认情况是懒执行的,也就是说仅在侦听的源数据变更时才执行回调。

7.1 监听用 reactive 声明的数据源

<script lang="ts"> import { computed, defineComponent, reactive, toRefs, watch } from 'vue'; interface Person {   name: string,   age: number } export default defineComponent({   setup(props, context) {     const state = reactive<Person>({ name: 'vue', age: 10 })      watch(       () => state.age,       (age, preAge) => {         console.log(age); // 100         console.log(preAge); // 10       }     )     // 修改age 时会触发watch 的回调, 打印变更前后的值     state.age = 100     return {       ...toRefs(state)     }   } }); </script>

7.2 监听用 ref 声明的数据源

<script lang="ts"> import { defineComponent, ref, watch } from 'vue'; interface Person {   name: string,   age: number } export default defineComponent({   setup(props, context) {     const age = ref<number>(10);      watch(age, () => console.log(age.value)); // 100      // 修改age 时会触发watch 的回调, 打印变更后的值     age.value = 100     return {       age     }   } }); </script>

7.3 同时监听多个值

<script lang="ts"> import { computed, defineComponent, reactive, toRefs, watch } from 'vue'; interface Person {   name: string,   age: number } export default defineComponent({   setup(props, context) {     const state = reactive<Person>({ name: 'vue', age: 10 })      watch(       [() => state.age, () => state.name],       ([newName, newAge], [oldName, oldAge]) => {         console.log(newName);         console.log(newAge);          console.log(oldName);         console.log(oldAge);       }     )     // 修改age 时会触发watch 的回调, 打印变更前后的值, 此时需要注意, 更改其中一个值, 都会执行watch的回调     state.age = 100     state.name = 'vue3'     return {       ...toRefs(state)     }   } }); </script>

7.4 stop 停止监听

在 setup() 函数内创建的 watch 监视,会在当前组件被销毁的时候自动停止。如果想要明确地停止某个监视,可以调用 watch()  函数的返回值即可,语法如下:

<script lang="ts"> import { set } from 'lodash'; import { computed, defineComponent, reactive, toRefs, watch } from 'vue'; interface Person {   name: string,   age: number } export default defineComponent({   setup(props, context) {     const state = reactive<Person>({ name: 'vue', age: 10 })      const stop =  watch(       [() => state.age, () => state.name],       ([newName, newAge], [oldName, oldAge]) => {         console.log(newName);         console.log(newAge);          console.log(oldName);         console.log(oldAge);       }     )     // 修改age 时会触发watch 的回调, 打印变更前后的值, 此时需要注意, 更改其中一个值, 都会执行watch的回调     state.age = 100     state.name = 'vue3'      setTimeout(()=> {       stop()       // 此时修改时, 不会触发watch 回调       state.age = 1000       state.name = 'vue3-'     }, 1000) // 1秒之后讲取消watch的监听      return {       ...toRefs(state)     }   } }); </script>

八、LifeCycle Hooks(新的生命后期)

新版的生命周期函数,可以按需导入到组件中,且只能在 setup() 函数中使用, 但是也可以在 setup 自定义, 在 setup 中使用

<script lang="ts"> import { set } from 'lodash'; import { defineComponent, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onErrorCaptured, onMounted, onUnmounted, onUpdated } from 'vue'; export default defineComponent({   setup(props, context) {     onBeforeMount(()=> {       console.log('befORMounted!')     })     onMounted(() => {       console.log('mounted!')     })      onBeforeUpdate(()=> {       console.log('beforupdated!')     })     onUpdated(() => {       console.log('updated!')     })      onBeforeUnmount(()=> {       console.log('beforunmounted!')     })     onUnmounted(() => {       console.log('unmounted!')     })      onErrorCaptured(()=> {       console.log('errorCaptured!')     })      return {}   } }); </script>

九、Template refs

通过 refs 来回去真实 dom 元素, 这个和 react 的用法一样,为了获得对模板内元素或组件实例的引用,我们可以像往常一样在  setup()中声明一个 ref 并返回它

  • 还是跟往常一样,在 html 中写入 ref 的名称

  • 在steup 中定义一个 ref

  • steup 中返回 ref的实例

  • onMounted 中可以得到 ref的RefImpl的对象, 通过.value 获取真实dom

<template>   <!--第一步:还是跟往常一样,在 html 中写入 ref 的名称-->   <div class="mine" ref="elmRefs">     <span>1111</span>   </div> </template>  <script lang="ts"> import { set } from 'lodash'; import { defineComponent, onMounted, ref } from 'vue'; export default defineComponent({   setup(props, context) {     // 获取真实dom     const elmRefs = ref<null | HTMLElement>(null);     onMounted (() => {       console.log(elmRefs.value); // 得到一个 RefImpl 的对象, 通过 .value 访问到数据     })      return {       elmRefs     }   } }); </script>

十、vue 的全局配置

通过 vue 实例上 config 的配置,包含 Vue 应用程序全局配置的对象。您可以在挂载应用程序之前修改下面列出的属性:

const app = Vue.createApp({})  app.config = {...}

为组件渲染功能和观察程序期间的未捕获错误分配处理程序。错误和应用程序实例将调用处理程序

app.config.errorHandler = (err, vm, info) => {}

可以在应用程序内的任何组件实例中访问的全局属性,组件的属性将具有优先权。这可以代替 Vue 2.xVue.prototype 扩展:

const app = Vue.createApp({})  app.config.globalProperties.$Http = 'xxxxxxxxs'

可以在组件用通过 getCurrentInstance() 来获取全局 globalProperties  中配置的信息,getCurrentInstance 方法获取当前组件的实例,然后通过 ctx 属性获得当前上下文,这样我们就能在 setup 中使用  router 和 vuex, 通过这个属性我们就可以操作变量、全局属性、组件属性等等

setup( ) {   const { ctx } = getCurrentInstance();   ctx.$http }

十一、Suspense 组件

在开始介绍 Vue 的 Suspense 组件之前,我们有必要先了解一下 React 的 Suspense 组件,因为他们的功能类似。

React.lazy 接受一个函数,这个函数需要动态调用 import()。它必须返回一个 Promise,该 Promise 需要 resolve 一个  default export 的 React 组件。

import React, { Suspense } from 'react';   const myComponent = React.lazy(() => import('./Component'));   function MyComponent() {   return (     <div>       <Suspense fallback={<div>Loading...</div>}>         <myComponent />       </Suspense>     </div>   ); }

Vue3 也新增了 React.lazy 类似功能的 defineAsyncComponent  函数,处理动态引入(的组件)。defineAsyncComponent 可以接受返回承诺的工厂函数。当您从服务器检索到组件定义时,应该调用 Promise  的解析回调。您还可以调用 reject(reason)来指示负载已经失败

import { defineAsyncComponent } from 'vue'  const AsyncComp = defineAsyncComponent(() =>   import('./components/AsyncComponent.vue') )  app.component('async-component', AsyncComp)

Vue3 也新增了 Suspense 组件:

<template>   <Suspense>     <template #default>       <my-component />     </template>     <template #fallback>       Loading ...     </template>   </Suspense> </template>  <script lang='ts'>  import { defineComponent, defineAsyncComponent } from "vue";  const MyComponent = defineAsyncComponent(() => import('./Component'));  export default defineComponent({    components: {      MyComponent    },    setup() {      return {}    } })   </script>

十二、vue 3.x 完整组件模版结构

一个完成的 vue 3.x 完整组件模版结构包含了:组件名称、  props、components、setup(hooks、computed、watch、methods 等)

<template>   <div class="mine" ref="elmRefs">     <span>{{name}}</span>     <br>     <span>{{count}}</span>     <div>       <button @click="handleClick">测试按钮</button>     </div>      <ul>       <li v-for="item in list" :key="item.id">{{item.name}}</li>     </ul>   </div> </template>  <script lang="ts"> import { computed, defineComponent, getCurrentInstance, onMounted, PropType, reactive, ref, toRefs } from 'vue';  interface IState {   count: 0,   name: string,   list: Array<object> }  export default defineComponent({   name: 'demo',   // 父组件传子组件参数   props: {     name: {       type: String as PropType<null | ''>,       default: 'vue3.x'     },     list: {       type: Array as PropType<object[]>,       default: () => []     }   },   components: {     /// TODO 组件注册   },   emits: ["emits-name"], // 为了提示作用   setup (props, context) {     console.log(props.name)     console.log(props.list)       const state = reactive<IState>({       name: 'vue 3.0 组件',       count: 0,       list: [         {           name: 'vue',           id: 1         },         {           name: 'vuex',           id: 2         }       ]     })      const a = computed(() => state.name)      onMounted(() => {      })      function handleClick () {       state.count ++       // 调用父组件的方法       context.emit('emits-name', state.count)     }      return {       ...toRefs(state),       handleClick     }   } }); </script>  <template>   <div class="mine" ref="elmRefs">     <span>{{name}}</span>     <br>     <span>{{count}}</span>     <div>       <button @click="handleClick">测试按钮</button>     </div>      <ul>       <li v-for="item in list" :key="item.id">{{item.name}}</li>     </ul>   </div> </template>  <script lang="ts"> import { computed, defineComponent, getCurrentInstance, onMounted, PropType, reactive, ref, toRefs } from 'vue';  interface IState {   count: 0,   name: string,   list: Array<object> }  export default defineComponent({   name: 'demo',   // 父组件传子组件参数   props: {     name: {       type: String as PropType<null | ''>,       default: 'vue3.x'     },     list: {       type: Array as PropType<object[]>,       default: () => []     }   },   components: {     /// TODO 组件注册   },   emits: ["emits-name"], // 为了提示作用   setup (props, context) {     console.log(props.name)     console.log(props.list)       const state = reactive<IState>({       name: 'vue 3.0 组件',       count: 0,       list: [         {           name: 'vue',           id: 1         },         {           name: 'vuex',           id: 2         }       ]     })      const a = computed(() => state.name)      onMounted(() => {      })      function handleClick () {       state.count ++       // 调用父组件的方法       context.emit('emits-name', state.count)     }      return {       ...toRefs(state),       handleClick     }   } }); </script>

感谢各位的阅读,以上就是“如何快速上手Vue3”的内容了,经过本文的学习后,相信大家对如何快速上手Vue3这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 如何快速上手Vue3

本文链接: https://www.lsjlt.com/news/84367.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 如何快速上手Vue3
    这篇文章主要讲解了“如何快速上手Vue3”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速上手Vue3”吧!Vue2 与 Vue3 的对比对 TypeS...
    99+
    2022-10-19
  • 怎么快速上手vue3
    这篇“怎么快速上手vue3”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么快速上手vue3”文章吧。全局 API 和应用 ...
    99+
    2023-06-29
  • 如何快速上手GitHub
    这篇文章给大家分享的是有关如何快速上手GitHub的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 Git...
    99+
    2023-06-27
  • 如何快速上手coLinux
    这篇文章给大家分享的是有关如何快速上手coLinux的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。colinux位是一款可以帮助用户创建虚拟系统的工具,通过该软件,您可以在电脑上运行Linux系统,支持在win中...
    99+
    2023-06-27
  • 如何快速上手SQL
    这篇文章主要为大家展示了“如何快速上手SQL”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何快速上手SQL”这篇文章吧。两张示例表为了方便练习SQL语法,特地...
    99+
    2022-10-18
  • 如何快速上手Rollup
    本篇内容主要讲解“如何快速上手Rollup”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何快速上手Rollup”吧!什么是rollup?系统的了解rollup...
    99+
    2022-10-19
  • 如何快速上手PostgreSQL
    本篇内容介绍了“如何快速上手PostgreSQL”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、安装首先,安装PostgreSQL客户端。...
    99+
    2023-06-27
  • 如何快速上手MMdnn
    这篇“如何快速上手MMdnn”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何快速上手MMdnn”文章吧。MMdnn 是微软...
    99+
    2023-06-27
  • 如何快速上手SaltStack
    这篇文章给大家分享的是有关如何快速上手SaltStack的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言...
    99+
    2023-06-27
  • 如何快速上手Picasso
    这篇文章将为大家详细讲解有关如何快速上手Picasso,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Picasso是Square公司出品的一款非常优秀的开源图片加载库,是目前Android开发中超级流行的...
    99+
    2023-06-27
  • 如何快速上手MongoDB
    小编给大家分享一下如何快速上手MongoDB,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。...
    99+
    2023-06-27
  • 十分钟带你快速上手Vue3过渡动画
    目录写在前面Vue的transition组件过渡democlass的命名规则使用animation过渡模式appear属性animate.css库的使用使用动画序列使用自定义过渡cl...
    99+
    2022-11-13
  • GN快速上手
    文章目录 背景GN快速入门使用GN建立构建环境交叉编译添加tutorial目标BUILD.gn配置说明 使用config使用默认配置 使用参数了解GN构建过程查找依赖GN文件执行脚...
    99+
    2023-09-12
    linux harmonyos
  • Scrapy快速上手
    超详细官方教程解析 https://blog.csdn.net/fly_yr/article/details/51540269   实战过程: 创建一个Scrapy项目 定义提取的Item 编写爬取网站的 spider 并提取 Item...
    99+
    2023-01-31
    上手 快速 Scrapy
  • Linux中如何快速上手Samba
    这篇文章主要介绍了Linux中如何快速上手Samba,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,有服务...
    99+
    2023-06-27
  • 如何快速上手LINQ to XML
    如何快速上手LINQ to XML,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。操作XML的技术有很多种:1)DOM(Document O...
    99+
    2022-10-19
  • 如何快速上手python爬虫
    这篇“如何快速上手python爬虫”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何快速上手python爬虫”文章吧。“爬虫...
    99+
    2023-06-27
  • linux中如何快速上手cpustat
    小编给大家分享一下linux中如何快速上手cpustat,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!cpustat ,一个用于linux下,非常简单的CPU使用...
    99+
    2023-06-27
  • 带你快速上手Servlet
    目录一、Servlet与Tomcat的关系二、什么是Servlet三、Servlet的类结构四、ServletConfig类五、ServletContext类六、Servlet的生命...
    99+
    2022-11-12
  • OneFlow怎么快速上手
    本文小编为大家详细介绍“OneFlow怎么快速上手”,内容详细,步骤清晰,细节处理妥当,希望这篇“OneFlow怎么快速上手”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。安装 O...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作