iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >Vue代码规范有哪些
  • 801
分享到

Vue代码规范有哪些

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

这篇文章将为大家详细讲解有关Vue代码规范有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、JS部分1. 和渲染无关的数据vue中data的数据默认便

这篇文章将为大家详细讲解有关Vue代码规范有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

一、JS部分

1. 和渲染无关的数据

vue中data的数据默认便会进行双向数据绑定,若是将大量的和渲染无关的数据直接放置在data中,将会浪费双向数据绑定时所消耗的性能,将这些和渲染无关的数据进行抽离并配合Object.freeze进行处理。

table中columns数据可以单独提取一个外部js文件作为配置文件,也可以在当前.vue文件中定义一个常量定义columns数据,因为无论如何都是固定且不会修改的数据,应该使用Object.freeze进行包裹,既可以提高性能还可以将固定的数据抽离,一些下拉框前端固定的数据也建议此操作。

const columnList = Object.freeze([   { title: '姓名', key: 'name', align: 'center' },   { title: '性别', key: 'gender', align: 'center' } ])

需要注意的是 Object.freeze()  冻结的是值,这时仍然可以将变量的引用替换掉,还有确保数据不会变才可以使用这个语法,如果要对数据进行修改和交互,就不适合使用冻结了。

2. Modal框的控制

一个页面种通常会存在很多个不同功能的弹框,若是每一个弹框都设置一个对应的变量来控制其显示,则会导致变量数量比较冗余和命名困难,可以使用一个变量来控制同一页面中的所有Modal弹框的展示。

比如某个页面中存在三个Modal弹框:

// bad // 每一个数据控制对应的Modal展示与隐藏 new Vue({     data() {         return {             modal1: false,             modal2: false,             modal3: false,         }     } })  // Good // 当modalType为对应的值时 展示其对应的弹框 new Vue({     data() {         return {             modalType: '' // modalType值为 modal1,modal2,modal3         }     } })

3. debounce使用

例如远程搜索时需要通过接口动态的获取数据,若是每次用户输入都接口请求,是浪费带宽和性能的。

当一个按钮多次点击时会导致多次触发事件,可以结合场景是否立即执行immediate:

<Select :remote-method="remoteMethod">     <Option v-for="item in temoteList" :value="item.value" :key="item.id">{{item.label}}</Option> </Select>

图片功能的开发过程中,图片的处理往往是比较容易被忽略的环节,也会在一定程度影响开发的效率和页面的性能:

(1) 图片压缩问题,除非特别要求图片必须高质量的显示,否则都应该进行对应的压缩处理

(2) 不同业务场景进行图片格式的选型:

  • JPG 适用于呈现色彩丰富的图片,JPG 图片经常作为大的背景图、轮播图或 Banner 图出现等

  • Logo、颜色简单且对比强烈的图片或背景、需要透明度等

  • 将常用且变动频率很低的小图片进行合并成雪碧图,对于变动比较频繁和小于6KB的图片进行base64处理

  • 根据项目图片数量和项目的用户机型分布等,考虑采取WEBp进行图片的处理

4. 路由组件传参

在组件中使用 $route 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性。

使用 props 将组件和路由解耦:

(1) 取代与 $route 的耦合

const User = {   template: '<div>User {{ $route.params.id }}</div>' } const router = new VueRouter({   routes: [     { path: '/user/:id', component: User }   ] })

(2) 通过 props 解耦

这样你便可以在任何地方使用该组件,使得该组件更易于重用和测试

const User = {   props: ['id'],   template: '<div>User {{ id }}</div>' } const router = new VueRouter({   routes: [     { path: '/user/:id', component: User, props: true },      // 对于包含命名视图的路由,你必须分别为每个命名视图添加 `props` 选项:     {       path: '/user/:id',       components: { default: User, sidebar: Sidebar },       props: { default: true, sidebar: false }     }   ] })

参考:路由组件传参

5. Vue生命周期

在父子组件中,掌握父子组件对应的生命周期钩子加载顺序可以让开发者在更合适的时候做适合的事情父组件

<template>   <div>     <h4>home</h4>     <list @hook:mounted="listMounted" />   </div> </template>  <script> import List from './list'  export default {   name: "home",   components: {     List   },   methods: {     listMounted(){       console.log('------------ listMounted');     }   },   beforeCreate() {     console.log("home beforeCreate");   },   created() {     console.log("home created");   },   beforeMount() {     console.log("home beforeMount");   },   mounted() {     console.log("home mounted");   },   beforeDestroy() {     console.log("home beforeDestroy");   },   destroyed() {     console.log("home destroyed");   } } </script>

子组件:

<template>   <div>     list   </div> </template>  <script> export default {   naem: "list",   beforeCreate() {     console.log("list beforeCreate");   },   created() {     console.log("list created");   },   beforeMount() {     console.log("list beforeMount");   },   mounted() {     console.log("list mounted");   },   beforeDestroy() {     console.log("list beforeDestroy");   },   destroyed() {     console.log("list destroyed");   } } </script>

加载时父子组件的加载顺序:

home beforeCreate --> home created --> home beforeMount --> list created --> list beforeMount --> list mounted

销毁时父子组件的销毁顺序:

home beforeDestroy --> list beforeDestroy --> list destroyed --> home destroyed

实际开发过程中会遇到当子组件某个生命周期完成之后通知父组件,然后在父组件做对应的处理。

emit up:

// 子组件在对应的钩子中发布事件 created(){   this.$emit('done') }  // 父组件订阅其方发 <list @done="childDone">

hook:

通过@hook监听子组件的生命周期

<list @hook:mounted="listMounted" />

6. Select优化

下拉框遍历时,需要注意options标签保持同一行,若是存在换行,会导致选中时的值存在多余的空白

<!-- bad --> <Select :remote-method="remoteMethod">     <Option v-for="item in temoteList" :value="item.value" :key="item.id">         {{item.label}}     </Option> </Select>

需要将Options和下拉框的值保持在同一行

<!-- good --> <Select :remote-method="remoteMethod">     <Option v-for="item in temoteList" :value="item.value" :key="item.id">{{item.label}}</Option> </Select>

7. data数据层级

data数据具有数据层级结构,切勿过度扁平化或者嵌套层级过深,若是过度扁平化会导致数据命名空间冲突,参数传递和处理,若是层级嵌套过深也会导致vue数据劫持的时候递归层级过深,若是嵌套层级丧心病狂那种的,小心递归爆栈的问题。而且层级过深会导致数据操作和处理不便,获取数据做容错处理也比较繁琐。一般层级保持2-3层最好。

若是只有一层数据,过于扁平

{     name: '',     age: '',     gender: '' }

导致处理不方便

// 作为接口参数传递 ajax({  this.name, this.age, this.gender })  // 接口获取数据,批量处理 ajax().then(res => {  const {name, age, gender} = res.data     this.name = name     this.age = age     this.gender = gender })

适当的层级结构不仅增加代码的维护和阅读性,还可以增加操作和处理的便捷性

{     person: { // 个人信息         name: '',         age: '',         gender: ''     } }

可以针对person进行操作

// 作为接口参数传递 ajax(this.person)  // 接口获取数据,批量处理 ajax().then(res => {  const {name, age, gender} = res.data     this.$set(this, 'person', {name, age, gender}) })

8. 策略模式

策略模式的使用,避免过多的if else判断,也可以替代简单逻辑的switch

const fORMatDemandItemType = (value) => {     switch (value) {         case 1:             return '基础'         case 2:             return '高级'         case 3:             return 'VIP'     } }  // 策略模式 const formatDemandItemType2 = (value) => {     const obj = {         1: '基础',         2: '高级',         3: 'VIP',     }          return obj[value] }

解构解构赋值以及默认值,当解构的数量小于多少时适合直接解构并赋值默认值,数据是否进行相关的聚合处理

const {   naem = '',   age = 10,   gender = 'man' } = res.data  // bad this.name = name this.age = age this.gender = gender  // good this.person = {   naem,   age,   gender }

9. 职责单一

任何时候尽量是的一个函数就做一件事情,而不是将各种逻辑全部耦合在一起,提高单个函数的复用性和可读性

每个页面都会在加载完成时进行数据的请求并展示到页面

created() {   this.init(); }, methods: {   // 将全部的请求行为聚合在init函数中   // 将每个请求单独拆分   init() {     this.getList1()     this.getList2()   },   getList1() {     // to do ...   },   getList2() {     // to do ...   } }

10. v-bind

二、HTML部分

1. html书写

编写template模板时,属性过多时,是否换行

<template>   <!-- 不换行 -->   <VueButton class="icon-button go-up" icon-left="keyboard_arrow_up" v-tooltip="$t('org.vue.components.folder-explorer.toolbar.tooltips.parent-folder')" @click="openParentFolder" />    <!-- 换行 -->   <VueButton     class="icon-button go-up"     icon-left="keyboard_arrow_up"     v-tooltip="$t('org.vue.components.folder-explorer.toolbar.tooltips.parent-folder')"     @click="openParentFolder"   /> </template>

2. 实体使用

html中展示一些如<,>,&等字符时,使用字符实体代替

<!-- bad --> <div>   > 1 & < 12 </div>    <!-- bad --> <div>   &gt; 1 &amp; &lt; 12 </div>

三、CSS部分

1. 样式穿透

在开发中修改第三方组件样式是很常见,但由于 scoped 属性的样式隔离,可能需要去除 scoped 或是另起一个 style  。这些做法都会带来副作用(组件样式污染、不够优雅),样式穿透在CSS预处理器中使用才生效。

  • less使用 /deep/

  • <style scoped lang="less"> .content /deep/ .el-button {  height: 60px; } </style>
  • scss使用 ::v-deep

  • <style scoped lang="scss"> .content ::v-deep .el-button {   height: 60px; } </style>
  • stylus使用 >>>

  • <style scoped ang="stylus"> 外层 >>> .custon-components{   height: 60px; } </style>

2. 空格

适当的空格可以提升代码的阅读体验,显得更为优雅和美观

选择器后、属性值:

.custom-style { // 选择器和{ 之间空格   margin: 0; // 属性值前   transform: scale(1.5, 2.2); // 逗号之后增加空格 }

3. 换行

和html类型,当某行的属性很多,适当的换行可以提高阅读和美观

.custom-style{   // 可以在一次声明中定义一个或多个属性   background: background-clip     background-color     background-image     background-origin     background-position     background-repeat     background-size; }

当一个规则包含多个选择器时,每个选择器声明必须独占一行,过长导致需要横向滚动阅读剩余的内容,应该尽量使得阅读顺序纵向化

.custom .header .title, .other .header .title {   color: #f0f; }

4. 嵌套层级

浏览器在解析css时,是按照从右到左递归匹配的,过深的层级嵌套不仅影响性能,而且还会导致样式阅读性和代码维护性降低,一般层架控制在5层之内。

5. 双引号

属性选择器中的值必须用双引号包围,不允许使用单引号,也不允许不使用引号,html的属性值也是推荐使用双引号,js中使用单引号:

.custom-style{ font-family: "PingFang SC", "STHeitiSC-Light"; }

6. 属性顺序

同一 规则下的属性在书写时,应按功能进行分组。并以 Formatting Model(布局方式、位置) > Box Model(尺寸)  > Typographic(文本相关) > Visual(视觉效果) 的顺序书写,以提高代码的可读性。

关于Vue代码规范有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Vue代码规范有哪些

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

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

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

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

下载Word文档
猜你喜欢
  • Vue代码规范有哪些
    这篇文章将为大家详细讲解有关Vue代码规范有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、JS部分1. 和渲染无关的数据vue中data的数据默认便...
    99+
    2024-04-02
  • Vue代码规范的方法有哪些
    这篇文章主要介绍“Vue代码规范的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue代码规范的方法有哪些”文章能帮助大家解决问题。一、JS部分1. 和渲染无关的数据vue中data的数据...
    99+
    2023-07-04
  • JavaScript代码规范有哪些
    本篇内容介绍了“JavaScript代码规范有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!所有的 J...
    99+
    2024-04-02
  • C#代码规范有哪些
    C#代码规范有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 引言按照此规范来开发C#程序可带来以下益处:&middot; 代码的编写...
    99+
    2023-06-17
  • Java代码规范有哪些
    这篇文章给大家介绍Java代码规范有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.命名规范(1)所有的标示符都只能用ASCⅡ字母(A-Z或a-z)、数字(0-9)和下划线“_”。(2)一个***包名的前缀总是全...
    99+
    2023-06-17
  • Flex代码规范有哪些
    这篇文章给大家介绍Flex代码规范有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Flex代码规范1.前言1.1目的对于代码,首要要求是它必须正确,能够按照程序员的真实思想去运行;第二个的要求是代码必须清晰易懂,使...
    99+
    2023-06-17
  • css代码规范有哪些
    css 代码规范对于保持一致性、可读性和可维护性至关重要,常见的规范包括:命名约定:使用小写字母和短划线,命名特定且描述性。缩进和对齐:按特定规则缩进、对齐选择器、声明和值。属性和值顺序...
    99+
    2024-04-06
    css 代码可读性 排列
  • jquery中有哪些代码规范
    这期内容当中小编将会给大家带来有关jquery中有哪些代码规范,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。<!DOCTYPE html> <...
    99+
    2024-04-02
  • 代码规范的方法有哪些
    本篇内容介绍了“代码规范的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码规范变量命名这里我简...
    99+
    2024-04-02
  • CSS代码书写规范有哪些
    本篇文章为大家展示了CSS代码书写规范有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.格式化代码1.1文件[建议]:CSS文件使用无BOM的UTF-8编码1...
    99+
    2024-04-02
  • HTML中代码的规范有哪些
    这篇文章主要为大家展示了“HTML中代码的规范有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTML中代码的规范有哪些”这篇文章吧。 HTML标记不区...
    99+
    2024-04-02
  • java代码规范的原则有哪些
    Java代码规范的原则有以下几个: 规范统一:所有代码必须按照统一的规范进行编写,包括缩进、命名规则、注释等。 代码可读性:...
    99+
    2023-10-24
    java
  • HTML代码的基本规范有哪些
    这篇文章主要讲解了“HTML代码的基本规范有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTML代码的基本规范有哪些”吧! (1)HTML代码的基本...
    99+
    2024-04-02
  • CSS代码高效编写规范有哪些
    这篇文章将为大家详细讲解有关CSS代码高效编写规范有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一些高效的CSS代码编写规范CSS学起来并不难,但在大...
    99+
    2024-04-02
  • Java中代码注释的规范有哪些
    Java中代码注释的规范有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。代码注释是架起程序设计者与程序阅读者之间的通信桥梁,最大限度的提高团队开发合作效率。...
    99+
    2023-05-31
    java 代码注释 ava
  • VB.NET编码规范有哪些
    今天就跟大家聊聊有关VB.NET编码规范有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、类型级单位的命名 类。 以Class声明的类,都必须以名词或名词短语命名,体现类的作用...
    99+
    2023-06-17
  • Go编码规范有哪些
    本文小编为大家详细介绍“Go编码规范有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go编码规范有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 代码风格1.1 代码格式代码必须用 gofmt 进行...
    99+
    2023-07-04
  • VB.NET有哪些编码规范
    本篇文章为大家展示了VB.NET有哪些编码规范,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、类型级单位的命名类。以Class声明的类,都必须以名词或名词短语命名,体现类的作用。如:Class I...
    99+
    2023-06-17
  • Python编码规范有哪些
    Python编码规范有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。编码在Python编码规范中,所有的 Python 脚本文件都应在文件头标上 # -*- codin...
    99+
    2023-06-17
  • .Net Framework编码规范有哪些
    .Net Framework编码规范有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。.Net Framework编码规范:·委托类型的名称都应该以EventHandle...
    99+
    2023-06-17
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作