Vue3中5个可以提高开发效率的小知识【整理分享】
本篇文章给大家聊聊Vue3 开发,整理分享5个可以提高开发效率的小知识,让你在 Vue3 的项目开发中更加丝滑,希望对大家有所帮助!
最近鼓捣了一下 Vue3 + Vite2,遇到了不少问题,整理了5个可以提高开发效率的小知识,让你在 Vue3 的项目开发中更加丝滑、顺畅。
一、setup name 增强
Vue3
的setup
语法糖是个好东西,但使用setup
语法带来的第一个问题就是无法自定义name
,而我们使用keep-alive
往往是需要name
的,解决这个问题通常是通过写两个script
标签来解决,一个使用setup
,一个不使用,但这样必然是不够优雅的。
<script> import { defineComponent, onMounted } from 'vue' export default defineComponent({ name: 'OrderList' }) </script> <script setup> onMounted(() => { console.log('mounted===') }) </script>
这时候借助插件vite-plugin-vue-setup-extend
可以让我们更优雅的解决这个问题,不用写两个script
标签,可以直接在script
标签上定义name
。
安装
npm i vite-plugin-vue-setup-extend -D
配置
// vite.config.ts import { defineConfig } from 'vite' import VueSetupExtend from 'vite-plugin-vue-setup-extend' export default defineConfig({ plugins: [ VueSetupExtend() ] })
使用
<script setup name="OrderList"> import { onMounted } from 'vue' onMounted(() => { console.log('mounted===') }) </script>
二、API 自动导入
setup
语法让我们不用再一个一个的把变量和方法都return
出去就能在模板上使用,大大的解放了我们的双手。然而对于一些常用的Vue
API,比如ref
、computed
、watch
等,还是每次都需要我们在页面上手动进行import
。
我们可以通过unplugin-auto-import
实现自动导入,无需import
即可在文件里使用Vue
的API。
安装
npm i unplugin-auto-import -D
配置
// vite.config.ts import { defineConfig } from 'vite' import AutoImport from 'unplugin-auto-import/vite' export default defineConfig({ plugins: [ AutoImport({ // dts: 'src/auto-imports.d.ts', // 可以自定义文件生成的位置,默认是根目录下 imports: ['vue'] }) ] })
安装配置完会自动生成auto-imports.d.ts
文件。
// auto-imports.d.ts // Generated by 'unplugin-auto-import' // We suggest you to commit this file into source control declare global { const computed: typeof import('vue')['computed'] const createApp: typeof import('vue')['createApp'] const customRef: typeof import('vue')['customRef'] const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] const defineComponent: typeof import('vue')['defineComponent'] const effectScope: typeof import('vue')['effectScope'] const EffectScope: typeof import('vue')['EffectScope'] const getCurrentInstance: typeof import('vue')['getCurrentInstance'] const getCurrentScope: typeof import('vue')['getCurrentScope'] const h: typeof import('vue')['h'] const inject: typeof import('vue')['inject'] const isReadonly: typeof import('vue')['isReadonly'] const isRef: typeof import('vue')['isRef'] // ... } export {}
使用
<script setup name="OrderList"> // 不用import,直接使用ref const count = ref(0) onMounted(() => { console.log('mounted===') }) </script>
上面我们在vite.config.ts
的配置里只导入了vue
,imports: ['vue']
,除了vue
的你也可以根据文档导入其他的如vue-router
、vue-use
等。
个人建议只对一些比较熟悉的API做自动导入,如vue
的API我们在开发时都比较熟悉,闭着眼都能写出来,对于一些不大熟悉的像VueUse
这种库,还是使用import
更好一些,毕竟编辑器都有提示,不易写错。
解决<span style="font-size: 16px;">eslint</span>
报错问题
在没有import
的情况下使用会导致eslint
提示报错,可以通过在eslintrc.js
安装插件**vue-global-api**
解决。
// 安装依赖 npm i vue-global-api -D // eslintrc.js module.exports = { extends: [ 'vue-global-api' ] }
三、告别.value
众所周知,ref
要求我们访问变量时需要加上.value
,这让很多开发者觉得难受.
let count = ref(1) const addCount = () => { count.value += 1 }
后来尤大大也提交了一份新的ref
语法糖提案。
ref: count = 1 const addCount = () => { count += 1 }
该提案一出便引起了社区的一片讨论,时间已经过去很久了,这里就不再废话这个话题了。
这里我介绍的是另外一种写法,也是官方后来出的一种方案,在ref
前加上$
,该功能默认关闭,需要手动开启。
// vite.config.ts import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [ vue({ refTransform: true // 开启ref转换 }) ] })
开启之后可以这样写:
let count = $ref(1) const addCount = () => { count++ }
该语法糖根据不同的版本配置也略有不同,下面贴一下我自己所用相关插件的版本:
"vue": "^3.2.2", "@vitejs/plugin-vue": "^1.9.0", "@vue/compiler-sfc": "^3.2.5", "vite": "^2.6.13"
四、自动导入图片
在Vue2
时我们经常会这样引用图片:
<img :src="require('@/assets/image/logo.png')" />
但在Vite
中不支持require
了,引用图片变成了下面这样:
<template> <img :src="Logo" /> </template> <script setup> import Logo from '@/assets/image/logo.png' </script>
每次使用图片都得import
,显然耽误了大家摸鱼的时间,这时我们可以借助vite-plugin-vue-images
来实现自动导入图片。
安装
npm i vite-plugin-vue-images -D
配置
// vite.config.ts import { defineConfig } from 'vite' import ViteImages from 'vite-plugin-vue-images' export default defineConfig({ plugins: [ ViteImages({ dirs: ['src/assets/image'] // 指明图片存放目录 }) ] })
使用
<template> <!-- 直接使用 --> <img :src="Logo" /> </template> <script setup> // import Logo from '@/assets/image/logo.png' </script>
五、忽略.vue后缀
相信很多人在Vue2
开发时,导入文件都是忽略.vue后缀的。但在Vite
里,忽略.vue后缀会引起报错。
import Home from '@/views/home' // error import Home from '@/views/home.vue' // ok
根据尤大大的回答,必须写后缀其实是故意这么设计的,也就是提倡大家这么去写。
但如果你真的不想写,官方也是提供了支持的。
// vite.config.ts import { defineConfig } from 'vite' export default defineConfig({ resolve: { extensions: ['.js', '.ts', '.jsx', '.tsx', '.json', '.vue'] } })
这里要注意,手动配置extensions
要记得把其他类型的文件后缀也加上,因为其他类型如js等文件默认是可以忽略后缀导入的,不写上的话其他类型文件的导入就变成需要加后缀了。
虽然可以这么做,不过毕竟官方文档说了不建议忽略.vue后缀,所以建议大家在实际开发中还是老老实实写上.vue。
感谢
本次分享到这里就结束了,感谢您的阅读!予人玫瑰,手有余香,别忘了动动手指点个赞。
本文如果有什么错误或不足,也欢迎评论区指正!
【相关推荐:vue.js视频教程】
以上是Vue3中5个可以提高开发效率的小知识【整理分享】的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

tinymce是一个功能齐全的富文本编辑器插件,但在vue中引入tinymce并不像别的Vue富文本插件一样那么顺利,tinymce本身并不适配Vue,还需要引入@tinymce/tinymce-vue,并且它是国外的富文本插件,没有通过中文版本,需要在其官网下载翻译包(可能需要翻墙)。1、安装相关依赖npminstalltinymce-Snpminstall@tinymce/tinymce-vue-S2、下载中文包3.引入皮肤和汉化包在项目public文件夹下新建tinymce文件夹,将下载的

vue3+vite:src使用require动态导入图片报错和解决方法vue3+vite动态的导入多张图片vue3如果使用的是typescript开发,就会出现require引入图片报错,requireisnotdefined不能像使用vue2这样imgUrl:require(’…/assets/test.png’)导入,是因为typescript不支持require所以用import导入,下面介绍如何解决:使用awaitimport

想要实现页面的局部刷新,我们只需要实现局部组件(dom)的重新渲染。在Vue中,想要实现这一效果最简便的方式方法就是使用v-if指令。在Vue2中我们除了使用v-if指令让局部dom的重新渲染,也可以新建一个空白组件,需要刷新局部页面时跳转至这个空白组件页面,然后在空白组件内的beforeRouteEnter守卫中又跳转回原来的页面。如下图所示,如何在Vue3.X中实现点击刷新按钮实现红框范围内的dom重新加载,并展示对应的加载状态。由于Vue3.X中scriptsetup语法中组件内守卫只有o

Vue实现博客前端,需要实现markdown的解析,如果有代码则需要实现代码的高亮。Vue的markdown解析库有很多,如markdown-it、vue-markdown-loader、marked、vue-markdown等。这些库都大同小异。这里选用的是marked,代码高亮的库选用的是highlight.js。具体实现步骤如下:一、安装依赖库在vue项目下打开命令窗口,并输入以下命令npminstallmarked-save//marked用于将markdown转换成htmlnpmins

vue3+ts+axios+pinia实现无感刷新1.先在项目中下载aiXos和pinianpmipinia--savenpminstallaxios--save2.封装axios请求-----下载js-cookienpmiJS-cookie-s//引入aixosimporttype{AxiosRequestConfig,AxiosResponse}from"axios";importaxiosfrom'axios';import{ElMess

前言无论是vue还是react,当遇到多处重复代码的时候,我们都会想着如何复用这些代码,而不是一个文件里充斥着一堆冗余代码。实际上,vue和react都可以通过抽组件的方式来达到复用,但如果遇到一些很小的代码片段,你又不想抽到另外一个文件的情况下,相比而言,react可以在相同文件里面声明对应的小组件,或者通过renderfunction来实现,如:constDemo:FC=({msg})=>{returndemomsgis{msg}}constApp:FC=()=>{return(

vue3项目打包发布到服务器后访问页面显示空白1、处理vue.config.js文件中的publicPath处理如下:const{defineConfig}=require('@vue/cli-service')module.exports=defineConfig({publicPath:process.env.NODE_ENV==='production'?'./':'/&

最终效果安装VueCropper组件yarnaddvue-cropper@next上面的安装值针对Vue3的,如果时Vue2或者想使用其他的方式引用,请访问它的npm官方地址:官方教程。在组件中引用使用时也很简单,只需要引入对应的组件和它的样式文件,我这里没有在全局引用,只在我的组件文件中引入import{userInfoByRequest}from'../js/api'import{VueCropper}from'vue-cropper&
