个人开发技术总结归纳

333 阅读3分钟

技术选型规范

  • 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-ifv-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)

持续更新...