vue3 setup语法糖各种语法新特性的使用方法(vue3+vite+pinia)

目录
  • 一、背景
  • 二、vue3语法的使用
    • 2.1. 父子通信props
    • 2.2. EventBus
    • 2.3. 计算属性computed
    • 2.4. pinia状态管理器的使用
      • 2.4.1. 模块化
      • 2.4.2. 使用方法
    • 2.5. watch监听器
    • 2.6. 全局函数/变量注册
  • 三、总结

一、背景

最近工作了比较忙,比较少写文章;最近做的开源项目,由于vue-clivuex要逐渐不维护了,因此需要对技术栈进行升级;目前所使用的最新技术栈是:vue3 + vite + element-plus + axios + pinia + mitt + echarts

其中:

  • vitevue团队最新推出的脚手架,相比vue-cli来说速度更快,依赖更少;
  • element-plus则是适配于vue3viteUI框架;
  • piniavuex的替代版本,它取消了mutations,语法上比原来的vuex更加简洁;
  • mitt主要用来做EventBus的功能,因为vue3取消了this指针,所以很多插件都是需要手动导入的,下文会介绍。

本文主要记录在代码重构过程中对vue3新语法特性的学习使用,并且使用的是setup语法糖的语法特性。

二、vue3语法的使用

2.1. 父子通信props

子组件:

<script setup>
// 父传子
defineProps({
	value: {
		type: Number,
		default: 1
	}
})
// 子传父
const emit = defineEmits(['change', 'setValue'])
// 模板绑定的监听函数
function changeValue(val) {
	emit('change', val)
}
function changeSet(val) {
	emit('setValue', val)
}
</script>

父组件:

// 父组件的使用方法和vue2相同
<child :value="value" @change="change" @setValue="setValue"></child>

2.2. EventBus

注意:需要自行安装mitt

npm i mitt

mian.js文件

// main.js
import mitt from 'mitt'
app.config.globalProperties.mittBus = new mitt()

组件中使用

<script setup>
import { getCurrentInstance } from "@vue/runtime-core"
const $bus = getCurrentInstance().appContext.config.globalProperties.$bus

$bus.$emit('change', value)
$bus.$on('change', (val) => {
	console.log(val)
})
</script>

2.3. 计算属性computed

由于vue3中没有this指针,因此使用计算属性需要自己自行导入

<script setup>
import { computed } from '@vue/runtime-core'

const value = computed(() => {
	return 1 + 1
})
</script>

2.4. pinia状态管理器的使用

2.4.1. 模块化

在安装pinia后,在目录stores下新建index.js文件,作为模块化的入口文件。
index.js文件

// 引入模块文件
import aside from './aside'
import header from './header'
import menuState from './menuState'
import tags from './tags'

export default function stores() {
    return {
        aside: aside(),
        header: header(),
        menuState: menuState(),
        tags: tags()
    }
}

在同目录下新建模块文件,如menuState文件:

// menuState
import { defineStore } from "pinia"

export default defineStore('menuState', {
    state() {
        return {
            showRightMenu: false,
            left: 0,
            top: 0,
            rightMenuList: []
        }
    },
    actions: {
        changeShowRightMenu(val) {
            this.showRightMenu = val
        },
        changeLeft(val) {
            this.left = val
        },
        changeTop(val) {
            this.top = val
        },
        changeRightMenuList(val) {
            this.rightMenuList = val
        }
    }
})

2.4.2. 使用方法

pinia的使用方法比较简便,在组件中导入后,模块可以直接引用,也可以使用计算属性使用;同时,actions中的方法也可以直接调用,无需使用以往的mapState等方式。如下所示:

<script setup>
import stores from '@/stores/index'
import { computed } from '@vue/runtime-core'

// 解构出menuState
const { menuState } from stores()

// 使用计算属性获取status
const showRightMenu = computed(() => {
	return menuState.showRightMenu
})

// 调用方法,可直接调用
menuState.changeLeft(12)
</script>

<template>
	<!-- 也可以直接在模板中使用 -->
	<div>
	{{menuState.top}}
	</div>
</template>

2.5. watch监听器

watch监听器的使用比较简单,并不需要导入,直接使用即可。

<script setup>
// dataSources是被监听的变量
watch(() => dataSources, () => {
	console.log(dataSources)
})
</script>

2.6. 全局函数/变量注册

细心的读者可能发现了,mitt就是一个全局注册的一个函数;同理,我们在定义一些全局函数或者变量时,也是使用这种方法。

// main.js
// 注册element-plus的一个消息提示
import { ElMessage } from 'element-plus'
app.config.globalProperties.$message.success = () => {
    ElMessage({
        message: "OK",
        type: 'success'
    })
}

组件中使用:

<script setup>
import { getCurrentInstance } from "@vue/runtime-core";
const $message.success = getCurrentInstance().appContext.config.globalProperties.$message.success
$message.success()
</script>

三、总结

本文主要是记录vue3setup语法糖的各种新语法的使用方法,之后有空再写篇不使用setup语法糖的语法使用。

到此这篇关于vue3 setup语法糖各种语法新特性的使用(vue3+vite+pinia)的文章就介绍到这了,更多相关vue3 setup语法糖内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vite创建一个标准vue3+ts+pinia项目

    目录 [01]使用的 Yarn创建项目: [02]在项目中使用pinia [03]添加vue-router [04] 安装按需自动导入插件 [05] 添加element-plus组件库 [06]添加sass [07] 安裝prettier 和 eslint 1.安装依赖项 使用vite创建一个标准vue3+ts+pinia项目的实现示例 [01]使用的 Yarn创建项目: 1.执行命令 yarn create vite my-vue-app --template vue-ts 3.cd my-v

  • Java8新特性之默认方法和静态方法

    前言 在Java 8之前,默认情况下,接口中的所有方法都是公共的和抽象的.但是这一限制在Java 8中被打破了,Java 8允许开发人员在接口中添加新方法,而无需在实现这些接口的类中进行任何更改. 为什么会有默认方法? 主要是为了方便扩展已有接口:如果没有默认方法,假如给Java中的某个接口添加一个新的抽象方法,那么所有实现了该接口的类都得修改,影响将非常大. 举个例子,Sortable <T>接口以及实现该接口的类SortableNumberCollection和SortableString

  • Java8新特性之默认方法详解

    目录 简介 正文 什么是默认方法 为啥要提供默认方法呢? 如果不提供呢? 主要针对谁? 实现了默认方法的接口和抽象类有区别吗 是不是可以说Java现在也实现了多重继承? 总结 简介 在Java之前,我们接触到的接口,都是只定义方法,不实现方法 (你看下面这几个人,像不像接口) 但是到了Java8就不一样了,因为在接口中新增了默认方法 这样的话,有些活,就可以交给接口自己去做了,而不用实现类去做(Java你这是在收买人心啊) 我们下面以问答的形式来介绍默认方法的相关知识点(据说问答模式可以让人更好

  • Java8新特性之默认方法(default)浅析

    一.什么是默认方法,为什么要有默认方法 简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法.只需在方法名前面加个default关键字即可. 为什么要有这个特性?首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类,目前的java 8之前的集合框架没有foreach方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现.然而,对于已经发布的版本,是没法在给接口添加新方法的同时不影响已有的实现.所以引进的默认方法

  • ThinkPHP3.1新特性之G方法的使用

    长期以来ThinkPHP都是需要通过debug_start.debug_end方法甚至Debug类才能完成那些调试的功能,而在ThinkPHP3.1版本中,这些复杂的功能被一个简单的G方法取代了,这不可不谓是一次华丽升级. G方法的作用包括标记位置和区间统计两个功能,下面来看下具体用法: 1.标记位置 G方法的第一个用法就是标记位置,例如: G('begin'); 表示把当前位置标记为begin标签,并且记录当前位置的执行时间,如果环境支持的话,还能记录内存占用情况.可以在任何位置调用G方法标记

  • 强烈推荐!Vue3.2中的setup语法糖

    目录 前文 1.什么是setup语法糖 2.使用setup组件自动注册 3.使用setup后新增API 3.1 defineProps 3.2 defineEmits 3.3 defineExpose vue3项目如何开启setup语法糖 总结: 前文 作为一个前端程序员,说起 Vue 3肯定不会陌生,作为时下最火的前端框架之一,很多人将它作为入门框架. 但是尽管 Vue 3很久之前就已经开始投入使用,也不免会有人抱怨 Vue 3的知识点太多太杂,更新太快.这不,最近 Vue 3又定稿了一项新技

  • C# using语法糖图文详解

    前言 什么是语法糖? (语法糖就是像糖一样的语法-) 语法糖(Syntactic sugar),又名糖衣语法,最早是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的. 通俗点来讲就是简化后的语法,但是其效果和原先语法是一样的,只是更方便我们程序员使用而已. 举个日常生活中简单的例子,使用语法糖之前你想表达今天天气很热:"今天气温好热啊!",用了语法糖后:"天热!", 但是效果是一样的,都能够给别人传达今天天气很热的信息. 很多语言都有语法糖

  • 传说中VUE的语法糖到底是做什么的

    目录 一.什么是语法糖? 二.VUE中语法糖有哪些? 1.最常见的语法糖 v-model 2.v-bind 的语法糖 3.v-on 的语法糖 4.修饰符 5.动态css 6.注册组件语法糖 一.什么是语法糖? 语法糖也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语.指的是计算机语言中添加的一种语法,在不影响功能的情况下,添加某种简单的语法也能实现效果,这种语法对计算机没有任何影响,但是对于程序员更方便,通常增加的语法糖能够增加程序员的可读性,减

  • Vue3 setup添加name的方法步骤

    目录 Vue3中name有什么用呢? Vue3 定义 name 1.自动生成 2.在开启一个script用来定义name 3.使用第三方插件 unplugin-vue-define-options 4.个人想法 我想着直接在script 定义name 不好吗? Vue3 setup 支持 name 插件实现 思路借鉴上面插件 总结 Vue3中name有什么用呢? 1.在递归组件的时候需要定义name 2.配合keep-alive include exclude 可以缓存组件 3.在Vue有报错或

  • java9新特性Collection集合类的增强与优化方法示例

    目录 一.提供of()方法创建集合 1.1.构建Set集合对象 1.2.构建List集合对象 1.3.构建Map对象 1.4.使用Map.ofEntries()和Map.entry() 二.Arrays 2.1.Arrays.mismatch() 2.2.Arrays.equals() 我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 写成一系列的

  • Java9新特性Stream流API优化与增强

    目录 1.Stream.takeWhile(Predicate) 2.Stream.dropWhile(Predicate) 3.StreamStream.iterate(T,Predicate,UnaryOperator) 4.StreamStream.ofNullable(T) 5.IntStream,LongStream和DoubleStream方法 我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还

随机推荐