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

Vue开发规范

时间:2023-04-09 17:47:38浏览次数:31  
标签:... Vue 规范 开发 location 使用 组件 query 路由

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

单文件组件内容:

<!--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一起使用

 

 

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

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

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

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

 

 

为所有路由统一添加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>

 

 

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

标签:...,Vue,规范,开发,location,使用,组件,query,路由
From: https://www.cnblogs.com/igoodful/p/17300657.html

相关文章

  • Vue——patch.ts【十四】
    前言前面我们简单的了解了vue初始化时的一些大概的流程,这里我们扩展下Vue的patch。内容这一块主要围绕vue中的__patch__进行剖析。__patch__Vue.prototype.__patch__的方法位于scr/platforms/web/runtime/index.ts中;//installplatformpatchfunction//判断是......
  • IDE 开发语言
    EmbarcaderoDelphi11的编译器IDE(IntegratedDevelopmentEnvironment)是使用ObjectPascal语言和DelphiVCL(VisualComponentLibrary)框架开发的。DelphiVCL是一个可视化组件库,它是Delphi的核心部分之一,用于构建Windows、macOS、iOS和Android应用程序的用户界面......
  • 100天学会100个shell脚本-03-规范日期格式
    第二天[root@gbysh]#./03-规范日期格式.sh7141999Jul141999[root@gbysh]#./03-规范日期格式.sh7-14-1999Jul141999[root@gbysh]#./03-规范日期格式.sh7/14/1999Jul141999[root@gbysh]#./03-规范日期格式.sh123141999./03-规范日期格式.sh:Unknow......
  • Vue Router 学习整理
    VueRouter是Vue.js的官方路由。它与Vue.js核心深度集成,让用Vue.js构建单页应用变得轻而易举。功能包括:嵌套路由映射动态路由选择模块化、基于组件的路由配置路由参数、查询、通配符展示由Vue.js的过度系统提供的过渡效果细致的导航控制自动激活CSS类的链接HTML5histo......
  • macOS 13.3.1 (22E261)With OpenCore 0.9.2开发版 and winPE双引导分区原版镜像
    镜像特点原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔)完全由黑果魏叔官方制作,针对各种机型进行默认配置,让黑苹果安装不再困难。系统镜像设置为双引导分区,全面去除clover引导分区(如有需要,可以自行直接替换opencore分区文件为clover引导文件)备注:此镜像仅适用与16g......
  • socket开发网络设置
    1.查看本机文件句柄使用情况$cat/proc/sys/fs/file-nr89280100000输出三个值的意思是:已经分配的文件句柄数已经分配但没有使用的文件句柄数最大文件句柄数2.系统级别设置文件句柄$echo"fs.file-max=6553560">>/etc/sysctl.conf$sysctl-p3.......
  • VUE-Antd开发,validate规则校验第一次为空,后面无论怎么输入都显示不可为空
    问题描述场景是修改弹窗,给数据赋值,其中数据有String和Array第一次操作多选框(数据类型是Array)输入为空并在输入框外点击,显示不可为空。之后无论怎么输入都显示不可为空。(当你控制台输出校验value时,会发现里面的值永远是第一次操作的数据,而非为空)可能原因1️⃣rules定义出错......
  • Chrome扩展开发的简介与实战(1)
    tags:学习前言本课的目的使大家学会最基础的Chrome扩展开发理念以实战为主,概念为辅本来我是想按部就班,条条框框的一步一步从概念,特点,等等讲起。左思右想觉得这样未免太过枯燥,如果大家失去了兴趣,讲得再有条理也是枉然。所以还是结合实战,能做出东西才是王道。上课形式......
  • VisionMobile:2012年移动开发者经济报告(六):三、开发者的收入(上)
    三、开发者收入在哪?量度开发者经济中的收入vs成本自2009年一夜成功的故事首次出现在主流科技新闻后,开发者利润一直是移动业界激烈讨论的话题。和Android相比,通常认为Apple的iOS每应用收入更高,但大多最后证实都只是传闻。为进一步了解开发者盈利情况,我们调查了超过1500名开发者,询......
  • VisionMobile:2012年移动开发者经济报告(四):一、新格局看似尘埃落定(下)
    平台双寡头例外的地区iOS,Android和mobileweb在全球范围被开发者采纳,存在地域有差别。欧洲,北美开发者喜欢将iOS作为主要开发平台,而亚洲、非洲和南美则是Android。这和消费者价格敏感保持一致。尽管Android,iOS双寡头平台更加巩固,有两个例外。第一、JavaME是非洲第二大平台,表明大量......