技术选型规范
- Vue版本:2.x
- 路由:vue-router
- 异步请求:Axios
- 全局状态管理:Vuex
- css预处理器:Sass
- 移动端适配:postcss-px2rem
- 图表:Echarts.js
- 二维码生成工具:vue-qr
- 轮播:swiper
公共组件库
非必要情况下为了使用单个功能而引入整个组件库,可将所使用的功能代码单独复制(自己实现)到项目中。所有组件必须使用按需引入
- 移动端UI组件库:VantUI
- 桌面端UI组件库:ElementUI
性能优化规范
- 非必要情况下,所有路由统一使用懒加载
- 全局状态管理统一存储(读取)Vuex,禁止直接读取浏览器缓存
- 页面中如有使用定时器,必须在组件
beforeDestroy钩子函数中进行销毁 - 如非必要,禁止将第三方库/自定义方法挂在到全局(Vue.prototype)
- 禁止直接操作DOM,使用
$ref代替(!!!) - 禁止直接访问子组件实例/父组件实例,如须在父组件触发子组件的重新渲染/更新,可使用更改
key属性的方式来触发(直接访问可能触发边界情况) - 必须为 v-for 设置键值 key
- 根据使用场景慎重选择
v-if与v-show
代码编写规范
- 页面显示数据格式与API返回不一致的情况下,如非必要使用过滤器的方式来处理显示(如:时间的显示,API返回时间戳,页面显示
yyyy-MM-dd。{{ timestamp | parseTime('yyyy-MM-dd') }}) - API接口实行模块化管理,
api目录(如:618所使用的接口统一在618.js中管理,公共接口统一在common.js中管理) - 接口调用统一使用新编写的请求封装
requset.js - 全局使用的状态,统一从
Vuex中读取(如:获取userId,页面中使用...mapGetters(['userId'])注入) - 如需异步修改Vuex中的状态,统一使用
dispatch更改 - 如有多出使用同样功能代码,将其抽离并单独封装(如:分享功能)
- 页面逻辑/UI较为复杂时,可单独封装组件,禁止出现单个页面文件出现‘长篇论文‘
- 所有提交按钮必须处理方式Double点击
- 如页面中使用大型静态数据时,必须将其抽出单独文件存放(如:618抽奖转盘数据)
- 非特殊情况下图标统一使用Svg,Svg文件存放目录
src/icons/svg,使用:<svg-icon icon-class="svg文件名" /> - 项目中所使用的环境变量信息统一由
.env.*文件管理 - 接口或者埋点所需要上传的数据必须采用约定的数据类型,禁止采用js的隐式转换
- 使用两个空格进行缩进
- 不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以提升可读性
- 测试/开发完成后必须对无用代码进行删除(如:
console) - 常量名必须大写(如:APP_BASE_URL)
持续更新...