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

 更新时间:2022年09月27日 10:22:24   作者:wuchus  
这篇文章主要介绍了vue3 setup语法糖各种语法新特性的使用(vue3+vite+pinia),本文主要是记录vue3的setup语法糖的各种新语法的使用方法,需要的朋友可以参考下

一、背景

最近工作了比较忙,比较少写文章;最近做的开源项目,由于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语法糖内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中插槽(slot)几种类型的使用方法

    vue中插槽(slot)几种类型的使用方法

    本文主要介绍了vue中插槽(slot)几种类型的使用方法,主要分三种,默认插槽,具名插槽,作用域插槽,下面就来一起介绍一下,感兴趣的可以了解一下
    2024-03-03
  • vue element-plus中el-input修改边框border的方法

    vue element-plus中el-input修改边框border的方法

    element样式还是蛮好的,只是有时候我们需要做一些调整,比如el-input的边框,下面这篇文章主要给大家介绍了关于vue element-plus中el-input修改边框border的相关资料,需要的朋友可以参考下
    2022-09-09
  • vue通过tailwindcss实现class动态绑定

    vue通过tailwindcss实现class动态绑定

    这篇文章主要介绍了vue通过tailwindcss实现class动态绑定,文中给大家介绍了一些常用类名语法记录,对vue动态绑定class相关知识感兴趣的朋友一起看看吧
    2023-07-07
  • Vue slot插槽作用与原理深入讲解

    Vue slot插槽作用与原理深入讲解

    插槽slot可以说在一个Vue项目里面处处都有它的身影,比如我们使用一些UI组件库的时候,我们通常可以使用插槽来自定义我们的内容,这篇文章主要介绍了Vue3中slot插槽使用方式,需要的朋友可以参考下
    2023-01-01
  • vue前端sku实现的方法小结

    vue前端sku实现的方法小结

    这篇文章主要为大家详细介绍了vue前端sku实现的相关方法,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下
    2024-11-11
  • vue3中ref绑定dom或者组件失败的原因及分析

    vue3中ref绑定dom或者组件失败的原因及分析

    这篇文章主要介绍了vue3中ref绑定dom或者组件失败的原因及分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Vue3+Canvas实现坦克大战游戏(一)

    Vue3+Canvas实现坦克大战游戏(一)

    这篇文章将利用Vue3和Canvas编写一个童年经典游戏—坦克大战,文中的示例代码讲解详细,感兴趣的小伙伴快来跟随小编一起学习一下吧
    2022-03-03
  • vue router解决路由带参数跳转时出现404问题

    vue router解决路由带参数跳转时出现404问题

    我的页面是从一个vue页面router跳转到另一个vue页面,并且利用windows.open() 浏览器重新创建一个页签,但是不知道为什么有时候可以有时候又不行,所以本文给大家介绍了vue router解决路由带参数跳转时出现404问题,需要的朋友可以参考下
    2024-03-03
  • Vue如何基于vue-i18n实现多国语言兼容

    Vue如何基于vue-i18n实现多国语言兼容

    这篇文章主要介绍了Vue如何基于vue-i18n实现多国语言兼容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • vue脚手架搭建过程图解

    vue脚手架搭建过程图解

    vue脚手架是个好东西,能够快速搭建vue单页面应用,vue是基于node环境的,所以要先安装node。下面通过图文并茂的形式给大家介绍vue脚手架搭建过程图解,感兴趣的朋友一起看看吧
    2018-06-06

最新评论