iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用Vue3.0实例分析
  • 110
分享到

使用Vue3.0实例分析

2023-06-27 10:06:09 110人浏览 八月长安
摘要

本篇内容介绍了“使用vue3.0实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!初始化环境在前面的文章中,我们通过vite搭建了一个开

本篇内容介绍了“使用vue3.0实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

初始化环境

在前面的文章中,我们通过vite搭建了一个开发环境,但是实际上现在vite并没有完善到支撑一个完整项目的地步,所以本文我们依然选择使用Vue-cli脚手架进行环境搭建。

小编使用的vue-cli版本是4.5.4,如果您的版本比较旧可以通过npm update @vue/cli来升级脚手架版本,如果没有安装可以通过npm install @vue/cli -g进行安装

使用脚手架新建项目
  1. 在工作空间打开终端(cmd),然后通过vue create my-vue3-test命令初始化项目

  1. 在第一步先选择Manually select features,进行手动选择功能

  1. 然后通过Space和上下键依次选择

   Choose Vue version   Babel   typescript   Router   Vuex   CSS Pre-processors   Linter/FORMatter

然后回车

  1. 然后提示选择Vue版本,选择3.x(Preview)

  2. Use class-style component syntax?选择n,即输入n然后回车

  3. 然后提示Use Babel alongside TypeScript,输入y`

  4. Use history mode for router输入n

  5. 然后css预处理器选择Less

  6. eslint选择ESLint + Prettier

  7. 然后是Lint on saveIn dedicater config files

  8. 最后一路回车即可完成项目搭建

启动项目

新建完项目之后,进入到项目中cd my-vue3-test,然后执行 yarn serve即可启动项目

启动之后即可通过访问Http://localhost:8080/访问项目

配置ant design vue

在当前Vue3.0正式版还未发布之际,国内比较出名的前端UI库中率先将Vue3.0继承到自家的UI库中的,PC端主要是ant-design-vue,移动端主要是vant, 本文所有示例代码都会基于ant-design-vue来进行,首先我们先安装ant-design-vue

安装依赖

   yarn add ant-design-vue@2.0.0-beta.6   yarn add babel-plugin-import -D

配置ant-design-vue按需加载

进入项目根目录,然后打开babel.config.js文件,将里面的内容修改为

   module.exports = {     presets: ["@vue/cli-plugin-babel/preset"],     plugins: [       // 按需加载       [         "import",         // style 为 true 加载 less文件         { libraryName: "ant-design-vue", libraryDirectory: "es", style: "css" }       ]     ]   };

尝试使用vue3 + antdv来添加一个小页面, 我们直接将views/Home.vue文件里面的代码替换为

<template>  <a-form layout="inline" :model="state.form">    <a-form-item>      <a-input v-model:value="state.form.user" placeholder="Username">        <template v-slot:prefix          ><UserOutlined         /></template>      </a-input>    </a-form-item>    <a-form-item>      <a-input        v-model:value="state.form.passWord"        type="password"        placeholder="Password"      >        <template v-slot:prefix          ><LockOutlined         /></template>      </a-input>    </a-form-item>    <a-form-item>      <a-button        type="primary"        :disabled="state.form.user === '' || state.form.password === ''"        @click="handleSubmit"      >        登录      </a-button>    </a-form-item>  </a-form></template><script>import { UserOutlined, LockOutlined } from "@ant-design/icons-vue";import { Form, Input, Button } from "ant-design-vue";import { Reactive } from "vue";export default {  components: {    UserOutlined,    LockOutlined,    [Form.name]: Form,    [Form.Item.name]: Form.Item,    [Input.name]: Input,    [Button.name]: Button  },  setup() {    const state = reactive({      form: {        user: "",        password: ""      }    });    function handleSubmit() {      console.log(state.form);    }    return {      state,      handleSubmit    };  }};</script>

然后重启一下项目,就可以发现已经可以正常使用ant-design-vue了。

Vue3.0新体验之setup

对于Vue3.0的问世,最吸引大家注意力的便是Vue3.0Composition api,对于Componsition API,可以说是两极分化特别严重,一部分人特别喜欢这个新的设计与开发方式,而另一部分人则感觉使用Composition API很容易写出来意大利面式的代码(可能这部分人不知道兰州拉面吧)。到底Composition API是好是坏,小编不做评论,反正我只是一个搬砖的。而本小节介绍的setup就是Composition API的入口。

setup介绍

setupVue3.0提供的一个新的属性,可以在setup中使用Composition API,在上面的示例代码中我们已经使用到了setup,在上文代码中我们在setup中通过reactive初始化了一个响应式数据,然后通过return返回了一个对象,对象中包含了声明的响应式数据和一个方法,而这些数据就可以直接使用到了template中了,就像上文代码中的那样。关于reactive,我将会在下一小节为你带来说明。

setup 的参数说明

setup函数有两个参数,分别是propscontext

props

propssetup函数的第一个参数,是组件外部传入进来的属性,与vue2.0props基本是一致的,比如下面代码

   export  default {     props: {       value: {         type: String,         default: ""       }     },     setup(props) {       console.log(props.value)     }   }

但是需要注意的是,在setup中,props是不能使用解构的,即不能将上面的代码改写成

   setup({value}) {       console.log(value)    }

虽然template中使用的是setup返回的对象,但是对于props,我们不需要在setup中返回,而是直接可以在template使用,比如上面的value,可以直接在template写成

   <custom-component :value="value"></custom-component>

context

contextsetup函数的第二个参数,context是一个对象,里面包含了三个属性,分别是

  • attrs

attrsVue2.0this.$attrs是一样的,即外部传入的未在props中定义的属性。对于attrsprops一样,我们不能对attrs使用es6的解构,必须使用attrs.name的写法

  • slots

slots对应的是组件的插槽,与Vue2.0this.$slots是对应的,与propsattrs一样,slots也是不能解构的。

  • emit

emit对应的是Vue2.0this.$emit, 即对外暴露事件。

setup 返回值

setup函数一般会返回一个对象,这个对象里面包含了组件模板里面要使用到的data与一些函数或者事件,但是setup也可以返回一个函数,这个函数对应的就是Vue2.0render函数,可以在这个函数里面使用JSX,对于Vue3.0中使用JSX,小编将在后面的系列文章中为您带来更多说明。

最后需要注意的是,不要在setup中使用this,在setup中的this和你真正要用到的this是不同的,通过propscontext基本是可以满足我们的开发需求的。

了解Composition API,先从reactiveref开始

在使用Vue2.0的时候,我们一般声明组件的属性都会像下面的代码一样

export  default {  data() {    return {      name: '编程网',      sex: '男'    }  }}

然后就可以在需要用到的地方比如computed,watch,methods,template等地方使用,但是这样存在一个比较明显的问题,即我声明data的地方与使用data的地方在代码结构中可能相距很远,有一种君住长江头,我住长江尾,日日思君不见君,共饮一江水的感觉。而Composition API的诞生的一个很重要的原因就是解决这个问题。在尤大大在关于Composition API的动机中是这样描述解决的问题的:

  1. 随着功能的增长,复杂组件的代码变得越来越难以阅读和理解。这种情况在开发人员阅读他人编写的代码时尤为常见。根本原因是 Vue 现有的 API 迫使我们通过选项组织代码,但是有的时候通过逻辑关系组织代码更有意义。

  2. 目前缺少一种简洁且低成本的机制来提取和重用多个组件之间的逻辑。

现在我们先了解一下Compositon API中的reactiveref

介绍reactive

Vue2.6中, 出现了一个新的api,Vue.observer,通过这个api可以创建一个响应式的对象,而reactive就和Vue.ovserver的功能基本是一致的。首先我们先来看一个例子

<template>  <!--在模板中通过state.name使用setup中返回的数据-->  <div>{{ state.name }}</div></template><script>import { reactive } from "vue";export default {  setup() {    // 通过reactive声明一个可响应式的对象    const state = reactive({      name: "编程网"    });    // 5秒后将编程网修改为 W3Cschool    setTimeout(() => {      state.name = "W3Cschool";    }, 1000 * 5);    // 将state添加到一个对象中然后返回    return {      state    };  }};</script>

上面的例子就是reactive的一个基本的用法,我们通过上面的代码可以看到reactiveVue.observer声明可响应式对象的方法是很像的,但是他们之间还是存在一些差别的。我们在使用vue2.0的时候,最常见的一个问题就是经常会遇到一些数据明明修改了值,但是界面却并没有刷新,这时候就需要使用Vue.set来解决,这个问题是因为Vue2.0使用的Object.defineProperty无法监听到某些场景比如新增属性,但是到了Vue3.0中通过Proxy将这个问题解决了,所以我们可以直接在reactive声明的对象上面添加新的属性,一起看看下面的例子

<template>  <div>    <div>姓名:{{ state.name }}</div>    <div>网站:{{ state.wz }}</div>  </div></template><script>import { reactive } from "vue";export default {  setup() {    const state = reactive({      name: "编程网"    });    // 5秒后新增属性wz W3Cschool.cn    setTimeout(() => {      state.wz = "W3Cschool.cn";    }, 1000 * 5);    return {      state    };  }};</script>

上面的例子虽然在state中并没有声明gzh属性,但是在5s后我们可以直接给state添加gzh属性,这时候并不需要使用Vue.set来解决新增属性无法响应的问题。

在上面的代码中,reactive通过传入一个对象然后返回了一个state,需要注意的是state与传入的对象是不用的,reactive对原始的对象并没有进行修改,而是返回了一个全新的对象,返回的对象是Proxy的实例。需要注意的是在项目中尽量去使用reactive返回的响应式对象,而不是原始对象。

const obj = {}const state = reactive(obj)// 输出falseconsole.log(obj === state)

介绍ref

假如现在我们需要在一个函数里面声明用户的信息,那么我们可能会有两种不一样的写法

// 写法1let name = '编程网'let wz = 'W3Cschool.cn'// 写法2let userInfo = {  name: '编程网',  wz: 'W3Cschool.cn'}

上面两种不同的声明方式,我们使用的时候也是不同的,对于写法1我们直接使用变量就可以了,而对于写法2,我们需要写成userInfo.name的方式。我们可以发现userInfo的写法与reactive是比较相似的,而Vue3.0也提供了另一种写法,就像写法1一样,即ref。先来看一个例子。

<template>  <div>    <div>姓名:{{ name }}</div>  </div></template><script>import { ref } from "vue";export default {  setup() {    const name = ref("编程网");    console.log('姓名',name.value)    // 5秒后修改name为 W3Cschool    setTimeout(() => {      name.value = "W3Cschool";    }, 1000 * 5);    return {      name    };  }};</script>

通过上面的代码,可以对比出来reactiveref的区别

  1. reactive传入的是一个对象,返回的是一个响应式对象,而ref传入的是一个基本数据类型(其实引用类型也可以),返回的是传入值的响应式值

  2. reactive获取或修改属性可以直接通过state.prop来操作,而ref返回值需要通过name.value的方式来修改或者读取数据。但是需要注意的是,在template中并不需要通过.value来获取值,这是因为template中已经做了解套。

Vue3.0优雅的使用v-model

v-model并不是vue3.0新推出的新特性,在Vue2.0中我们已经大量的到了v-model,但是V3V2还是有很大的区别的。本节我们将主要为大家带来如何在Vue3.0中使用v-model,Vue3.0中的v-model提供了哪些惊喜以及如何在Vue3.0中自定义v-model

Vue2.0Vue3.0中使用v-model

Vue2.0中如何实现双向数据绑定呢?常用的方式又两种,一种是v-model,另一种是.sync,为什么会有两种呢?这是因为一个组件只能用于一个v-model,但是有的组件需要有多个可以双向响应的数据,所以就出现了.sync。在Vue3.0中为了实现统一,实现了让一个组件可以拥有多个v-model,同时删除掉了.sync。如下面的代码,分别是Vue2.0Vue3.0使用v-model的区别。

Vue2.0中使用v-model

   <template>     <a-input v-model="value" placeholder="Basic usage" />   </template>   <script>   export default {     data() {       return {         value: '',       };     },   };   </script>

Vue3.0中使用v-model

   <template>     <!--在vue3.0中,v-model后面需要跟一个modelValue,即要双向绑定的属性名-->     <a-input v-model:value="value" placeholder="Basic usage" />   </template>   <script>   export default {     // 在Vue3.0中也可以继续使用`Vue2.0`的写法     data() {       return {         value: '',       };     },   };   </script>

vue3.0中,v-model后面需要跟一个modelValue,即要双向绑定的属性名,Vue3.0就是通过给不同的v-model指定不同的modelValue来实现多个v-model。对于v-model的原理,下文将通过自定义v-model来说明。

自定义v-model

使用Vue2.0自定义一个v-model示例
  1. 组件代码

<template>  <div class="custom-input">    <input :value="value" @input="$_handleChange" />  </div></template><script>export default {  props: {    value: {      type: String,      default: ''    }  },  methods: {    $_handleChange(e) {      this.$emit('input', e.target.value)    }  }}</script>

2 . 在代码中使用组件

<template>      <custom-input v-model="value"></custom-input></template><script> export default {    data() {      return {        value: ''      }    }  }</script>

Vue2.0中我们通过为组件设置名为value属性同时触发名为input的事件来实现的v-model,当然也可以通过model来修改属性名和事件名,可以看我以前的文章中有详解。

使用Vue3.0自定义一个v-model示例

组件代码

   <template>     <div class="custom-input">       <input :value="value" @input="_handleChangeValue" />     </div>   </template>   <script>   export default {     props: {       value: {         type: String,         default: ""       }     },     name: "CustomInput",     setup(props, { emit }) {       function _handleChangeValue(e) {         // vue3.0 是通过emit事件名为 update:modelValue来更新v-model的         emit("update:value", e.target.value);       }       return {         _handleChangeValue       };     }   };   </script>

到了Vue3.0中,因为一个组件支持多个v-model,所以v-model的实现方式有了新的改变。首先我们不需要使用固定的属性名和事件名了,在上例中因为是input输入框,属性名我们依然使用的是value,但是也可以是其他任何的比如name,data,val等等,而在值发生变化后对外暴露的事件名变成了update:value,即update:属性名。而在调用组件的地方也就使用了v-model:属性名来区分不同的v-model

在代码中使用组件

<template>  <!--在使用v-model需要指定modelValue-->  <custom-input v-model:value="state.inputValue"></custom-input></template><script>import { reactive } from "vue";import CustomInput from "../components/custom-input";export default {  name: "Home",  components: {    CustomInput  },  setup() {    const state = reactive({      inputValue: ""    });    return {      state    };  }};</script>

“使用Vue3.0实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 使用Vue3.0实例分析

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

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

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

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

下载Word文档
猜你喜欢
  • 使用Vue3.0实例分析
    本篇内容介绍了“使用Vue3.0实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!初始化环境在前面的文章中,我们通过vite搭建了一个开...
    99+
    2023-06-27
  • Vue3.0新特性以及使用的示例分析
    这篇文章给大家分享的是有关Vue3.0新特性以及使用的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为什么要升级 Vue3使用 Vue2.x 的小伙伴都熟悉,Vue2.x...
    99+
    2024-04-02
  • HTML使用实例分析
    本篇内容介绍了“HTML使用实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! HTML 标题 ...
    99+
    2024-04-02
  • WebSocket使用实例分析
    本文小编为大家详细介绍“WebSocket使用实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“WebSocket使用实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2024-04-02
  • SpringMVC使用实例分析
    这篇文章主要介绍了SpringMVC使用实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringMVC使用实例分析文章都会有所收获,下面我们一起来看看吧。一丶SpringMVC概述Spring 为展现...
    99+
    2023-06-27
  • Proxy使用实例分析
    这篇文章主要讲解了“Proxy使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Proxy使用实例分析”吧!了解代理模式一个例子作为一个单身钢铁直男程序员,小王最近逐渐喜欢上了前端小...
    99+
    2023-06-27
  • CSS3使用实例分析
    这篇文章主要介绍“CSS3使用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS3使用实例分析”文章能帮助大家解决问题。 1、前缀-webkit-(ch...
    99+
    2024-04-02
  • class使用实例分析
    这篇文章主要介绍“class使用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“class使用实例分析”文章能帮助大家解决问题。 看到class实际都是使用...
    99+
    2024-04-02
  • react使用实例分析
    这篇文章主要介绍“react使用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react使用实例分析”文章能帮助大家解决问题。为什么要引入 React在写 React 的时候,你可能会写类似...
    99+
    2023-06-27
  • awk使用实例分析
    本篇内容主要讲解“awk使用实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“awk使用实例分析”吧!awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析...
    99+
    2023-06-27
  • Docker使用实例分析
    今天小编给大家分享一下Docker使用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、进入存放自己项目war的目录...
    99+
    2023-06-27
  • slot使用实例分析
    这篇文章主要介绍“slot使用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“slot使用实例分析”文章能帮助大家解决问题。   使用slot场景一:  ...
    99+
    2024-04-02
  • ADO.NET使用实例分析
    本篇内容主要讲解“ADO.NET使用实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ADO.NET使用实例分析”吧!用ADO.NET实例中的数据,不管是不是原创,都能够通过双面编程模型进行...
    99+
    2023-06-17
  • Yum使用实例分析
    这篇文章主要讲解了“Yum使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Yum使用实例分析”吧!Yum是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管...
    99+
    2023-06-27
  • SAP使用实例分析
    这篇文章主要介绍了SAP使用实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SAP使用实例分析文章都会有所收获,下面我们一起来看看吧。大家知道采购业务里,有一种特殊的采购形式,就是按单采购,意思是所采购的...
    99+
    2023-06-05
  • linux ssh使用实例分析
    这篇“linux ssh使用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linu...
    99+
    2024-04-02
  • C#类使用实例分析
    这篇“C#类使用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#类使用实例分析”文章吧。实例using ...
    99+
    2023-06-17
  • Redis的使用实例分析
    这篇文章主要介绍“Redis的使用实例分析”,在日常操作中,相信很多人在Redis的使用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis的使用实例分析”的疑惑...
    99+
    2024-04-02
  • Vuex的使用实例分析
    这篇文章主要介绍“Vuex的使用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vuex的使用实例分析”文章能帮助大家解决问题。 Vuex 简介 1. 概...
    99+
    2024-04-02
  • redis的bitmap使用实例分析
    这篇文章主要讲解了“redis的bitmap使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“redis的bitmap使用实例分析”吧!1.位图简介...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作