首页 > 其他分享 >Vue开发规范

Vue开发规范

时间:2023-04-17 15:02:15浏览次数:48  
标签:... Vue 规范 github 开发 使用 组件 query com

###############################

有赞:https://github.com/youzan/vant

https://github.com/iview/iview

https://github.com/ElemeFE/element

https://github.com/JosephusPaye/Keen-UI

https://github.com/ElemeFE/mint-ui

https://github.com/museui/muse-ui

https://github.com/youzan/vant

https://github.com/AT-UI/at-ui

zircle UI: https://zircleui.github.io/zircleUI/#/?id=introduction

https://vuetifyjs.com/components/breadcrumbs

https://github.com/xudafeng/autoresponsive-vue

https://github.com/xudafeng/autoresponsive-vue

 

https://github.com/Miller547719886/iview-FuncTable

单文件组件内容:

<!--componentA.vue-->
<script>/*...*/</script>
<template>...</template>
<style>/*...*/</style>

 

 

 

组件相关:

尽可能的减少watcher的数量

尽量减少组件嵌套,递归渲染影响性能

大量数据渲染导致卡顿,可以先渲染用户可见部分,后面滚动在渲染其他数据

 

推荐用单文件的方式组织组件,利于提高单个组件的编辑查阅效率,即使不使用构建工具,也可以变通的使用单文件组件开发方式。

 

组件命名规则:

组件命名应使用完整单词。原因:避免歧义。

组件名必须为多个单词。原因:避免与未来的HTML元素冲突,配合框架或规范约束第一条理解。

  • 基础组件加特定前缀预示复用性,例如Base;
  • 单例组件用The前缀标识预示唯一性;TheHeading.vue,TheSidebar.vue
  • 耦合组件中的子组件使用父组件名做前缀预示耦合关系,例如TodoList和TodoListItem;
  • 相关组件命名用一般性描述单词开头,用修饰性单词结尾,例如ColorPicker、ColorPickerMulti、ColorPickerQuery。SearchButtonClear.vue,SearchButtonRun.vue

1.组件的 data 属性的值必须是返回一个对象的函数;

   原因:如果直接用一个数据对象,则组件的多个实例之间会产生数据污染,导致失去复用价值。

2.组件的Prop在声明时推荐使用PascalCase(驼峰式),但在模板中必须使用kebab-case(连字符式);

  原因:HTML对大小写不敏感。

组件的Prop 定义应该尽量详细,至少要定义类型,利于开发期间调试和提高组件代码可读性。

通过props和事件进行父子组件之间通信,不可使用this.$parent或改变prop。避免隐性的父子组件通信

区分vuex和props的使用边界:业务组件使用vuex维护状态,方便组件之间通信;通用组件使用props以及事件进行父子组件通信,与业务解耦. 在通用组件中定义props尽可能详细,指定类型

 

在除了DOM模板以外的任何地方使用自闭和组件写法,使代码更简洁,例如<my-component/>。

组件模板应该只包含简单的表达式,复杂的表达式则应该重构为计算属性或方法,因为计算属性和方法利于复用和重构,而且模板也会看起来也更清晰易懂。

为列表渲染设置属性key。切忌使用下标作为key,会失去虚拟Dom对比的优化

v-for必须配合key使用;

  原因:可以提高部分情况下Vue的渲染性能。

<div v-for = 'item in items' :key = 'item.id'>
<!--内容-->
</div>

 

在v-if/v-if-else/v-else 中使用key,添加key,对比虚拟Dom时会认为是不同的节点,将旧元素直接移除并在相同位置添加新元素

<div v-if = 'error' key = 'search-status'>
{{error}}
</div>
<div v-else key = 'search-results'>
{{results}}
</div>

 

 

 

指令缩写要么一直用要么一直不用,提高模板可读性。指令缩写保持统一 ,用:表示v-bind,@表示v-on

避免v-if和v-for一起使用。

推荐做法

  • 为过滤列表中的项目,可将循环列表替换为一个计算属性,返回过滤后的列表
  • 为避免渲染本该隐藏的列表,可将v-if放到容器组件上

 

 

scoped 样式中避免使用元素选择器;

  原因:遍历元素的效率通常很低

组件样式必须设置作用域,避免样式冲突,单文件组件可以选择使用scope特性,通用组件可以选择基于class的规则,例如BEM。

为组件样式设置作用域,通过scoped特性或者css Modules设置样式作用域,组件库使用class策略,使用容易理解的class名称且没有太高的选择器优先级,不容易导致冲突,拥有多个特性的元素应该分多行撰写,每个特性一行。

 

 

不要在选项属性或回调上使用箭头函数。比如 created: () => console.log(this.a) 或 vm.$watch('a', newValue => this.myMethod())。因为箭头函数是和父级上下文绑定在一起的,this 不会是如你所预期的 Vue 实例,且 this.a 或 this.myMethod也会是未定义的。

 

为所有路由统一添加query:上级路由携带的query参数,需要在所有路由中携带,且不影响切换

解决方案:

使用全局守卫beforeEach

// 缺点 全局守卫beforeEach会执行两次,且每次切换路由都会切换两次
const query = {refer: 'test'}
router.beforeEach((to,from,next)=>{
    to.query.referer ? next() : next({...to,query,...query})
})

使用函数劫持,推荐使用

const query = {refer: 'test'};
const transitionTo = router.history.transitionTo
  
router.history.transitionTo = function(location,onComplete,onAbout){
    location = typeof location === 'object' ? {...location,query:{...location.query,...query}} : {path:location,query}
    transitionTo.call(router.history,location,onComplete,onAbout)
}

 

路由切换组件不变。路由的params参数改变不会重新触发组件的生命周期

解决方案

  • 路由导航守卫beforeRouteUpdate,拉取数据重新渲染视图,vue-router2.2+支持,推荐使用,
  • 观察$route对象的变化,添加watch,增加依赖追踪的内存开销
// good
const User = {
    template:'...',
    watch:{
        '$route.query.id'(to,from){
            //....
        },
        '$route.query.page'(to,from){
            //....
        }
 
    }
 
}

 

为router-view组件添加属性key,利用虚拟dom渲染通过key对比节点的原理,不足之处在于切换路由组件会被销毁并重新创建

<router-view :key = '$route.fullPath'></router-view>

 

 

js中方法名和类名规范:

  • 类名遵循大驼峰命名规范: function MyClass() {}
  • 方法名遵循小驼峰规范:function myFunc() {}

#####################



标签:...,Vue,规范,github,开发,使用,组件,query,com
From: https://blog.51cto.com/u_13912516/6195199

相关文章

  • js开发规范
    ####################### 1.缩进[强制] 使用4个空格做为一个缩进层级,不允许使用2个空格或tab字符。[强制] switch中缩进2个空格[强制] 要求分号前面不可以有空格,后面可以有空格[强制] 要求语句块之前保留一个空格[强制] 关键字和类似关键字前后保留一个空格[强制] 要......
  • 【vue3-element-admin】Husky + Lint-staged + Commitlint + Commitizen + cz-git 配
    前言本文介绍vue3-element-admin如何通过Husky+Lint-staged+Commitlint+Commitizen+cz-git来配置Git提交代码规范。核心内容是配置Husky的pre-commit和commit-msg两个钩子:pre-commit:Husky+Lint-staged整合实现Git提交前代码规范检测/格式化(前提......
  • Vue3中 如何使用ref标签,对组件进行操作
    在Vue2中一般用this.$ref.xxxx进行获取组件对象Vue3中就不使用这个方法了例如:<el-uploadclass="upload-demo"action="":http-request="handleUpload":on-change="handleChange":before-upload="handl......
  • 使用 snmp4j 开发 SnmpTrap V3 版本服务端
    SnmpTrap snmp,是简单网络协议,snmpTrap是硬件设备遇到异常时主动推送给服务端的消息安装好snmptrap依赖后,执行snmptrap-h,查看帮助可以看到有3个版本,1、2c和3其中1和2c使用的团体名,而3版本添加了新的认证机制常规参数-r重试次数和-t超时时间指令格式常用第二......
  • 业务扩展:图灵机器人调用(API)接口模式的开发流程及其注意事项
    业务场景:在网站添加一个可以回答用户问题的对话机器人;解决方案:使用三方图灵机器人(turing)进行语料库控制,数据统计,问题反馈等;操作流程:1、申请图灵开发者账号权限,官网网站:http://www.tuling123.com/2、购买相应套餐获取机器人功能,完成认证之后可获得免费版,未完成认证则需要完成套......
  • 布隆过滤器:后端开发者必学的知识点!
    摘要:对于后端程序员来讲,学习和理解布隆过滤器有很大的必要性。来吧,我们一起品味布隆过滤器的设计之美。本文分享自华为云社区《品味布隆过滤器的设计之美》,作者:勇哥java实战分享。布隆过滤器是一个精巧而且经典的数据结构。你可能没想到:RocketMQ、Hbase、Cassandra、LevelD......
  • 工具开发-idea
    1、正则语法工具支持python\java\php\js等语言的正则,可以设计正则规则,观察对样本文本的处理结果,以及对批量样本的处理结果支持各语言的正则语法使用提示,以及对正则规则的功能进行中文阐述支持常用功能的正则收集,比如请求报文解析、url解析、手机号判断、邮箱判断、ip判断等等2......
  • vue3中使用ref语法糖
    自从引入组合式API的概念以来,一个主要的未解决的问题就是ref和响应式对象到底用哪个。响应式对象存在解构丢失响应性的问题,而ref需要到处使用.value则感觉很繁琐,并且在没有类型系统的帮助时很容易漏掉.value写法优化以上是官方原话。大概就是新的语法糖可以让我们......
  • Java开发笔记13(树的结构修改记录)
    1.Controller:/***区域树生成*/@GetMapping("/list")privateResultregionTree(){Stationstation=getStation(getUser());StringstationCode=station.getStationTelecode();List<NewTreeVo>tree=stationInfRelaService.regionTree(stat......
  • [全程建模]关于建模技术中界面层开发设计的问题
    是的,我曾经说过这个问题。这也是目前全程建模或者说是我认为的建模技术目前最大的两个弱点之一。jsp几乎没有自动生成的方法,否则,你设计的工作量会远远大于实际编码的工作量,所以,我建议b/s开发中界面部分通过界面设计引入,然后,手写完成。目前比较好的做jsp开......