jtwang7 / Project-Note

开发小记 - 项目里的一些新奇玩意儿
1 stars 0 forks source link

前端开发变量命名系列 - JavaScript篇 #5

Open jtwang7 opened 3 years ago

jtwang7 commented 3 years ago

前端开发变量命名系列 - JavaScript篇

引用文章:前端开发变量命名系列 - JavaScript篇

文章详细内容请参阅引用文章,本文仅作简短的概括,方便开发查阅。

布尔值(Boolean)命名

场景一:表示可见性、进行中的状态

可见性在通常指页面中的元素、组件是否显示(或者组件挂载到DOM上,但并不可见)。 进行中主要是说明某种状态是处于持续进行中。

推荐命名方式:is + 动词(现在进行时)/形容词

{
  isShow: '是否显示',
  isVisible: '是否可见',
  isLoading: '是否处于加载中',
  isConnecting: '是否处于连接中',
  isValidating: '正在验证中',
  isRunning: '正在运行中',
  isListening: '正在监听中'
}

场景二:属性状态类

通常用来描述实体(例如:HTML标签、组件、对象)的功能属性,而且定法比较固定(有些是专有的命名)。

{
  disabled: '是否禁用',
  editable: '是否可编辑',
  clearable: '是否可清除',
  readonly: '只读',
  expandable: '是否可展开',
  checked: '是否选中',
  enumberable: '是否可枚举',
  iterable: '是否可迭代',
  clickable: '是否可点击',
  draggable: '是否可拖拽'
}

场景三:配置类、选项类

主要是指组件功能的开启与关闭,功能属性的配置。

这是一种比较常见的情景,目前命名方式也有很多种 使用 withXx 来表示组件在基本功能形态外的其它功能,比如组件的基础功能到高级功能的开启; 使用 enableXx 来表示组件某些功能的开启; 使用 allowXx 来表示功能属性的配置; 使用 noXx 用于建议功能使用者这个不建议开启;

{
  withTab: '是否带选项卡',
  withoutTab: '不带选项卡',
  enableFilter: '开启过滤',
  allownCustomScale: '允许自定义缩放',
  shouldClear: '是否清除',
  canSelectItem: '是否能选中元素',
  noColon: '不显示label后面的冒号',
  checkJs: '检查Js',
  emitBOM: 'Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files.'
}

函数命名

场景一:事件处理

事件处理函数是前端平时用到最多的,包括浏览器原生事件、异步事件和组件自定义事件。 在写法上最常见的两种命名分别为 onXx, onXxClickhandleXx, handleXxChange

这里如何在二者之间选择,可以从二方面来归类。

  1. 原生事件采用 onXx,而自定义事件使用 handleXx。
  2. 事件主动监听采用 onXx,被动处理使用 handleXx。

从实践及三大主流框架的文档关于事件部分的内容来看,推荐使用 handleXx 这种方式,而在表单提交的时候通常采用 onSubmit 函数。 下面列出了一些约定成俗的适用例子:

{
  onSubmit: '提交表单',
  handleSizeChange: '处理分页页数改变',
  handlePageChange: '处理分页每页大小改变',
  onKeydown: '按下键'
}

场景二:异步处理

在写数据层服务、状态管理中的Action命名,以及Ajax回调的命名规则。 命名主要围绕数据的增删查找来划分: 获取数据通常是 getXxfetchXx,在作者看来两者在使用上的区分在于 getXx 的数据来源不一定直接取自异步的原始数据,可能是加工处理后的,而 fetchXx 是直接拿的原始数据。 deleteXx 主要用于数据删除 removeXx 在语义上是移除数据,通常情况数据是还存在的,只是没有显示或数据假删除 updateXx 是指数据更新操作 addXx 是在已有列表数据中添加新的子项 createXx 主要是创建新的实例,比如新建一个账户

{
  getUsers: '获取用户列表',
  fetchToken: '取得Token',
  deleteUser: '删除用户',
  removeTag: '移除标签',
  updateUsrInfo: '更新用户信息',
  addUsr: '添加用户',
  createAccount: '创建账户'
}

场景三: 跳转路由

在实际开发过种中,比如在使用 react-router/vue-router 时,在模板或者JSX中可以直接在标签中写上目标地址,但有些时候跳转的目标地址是经过判断或者组合后的,并且通过事件触发跳转的,这个时候就需要一个函数来处理,那么在函数命名的时候可以考虑使用 toXxgoXx 这两种方式

{
  toTplDetail: '跳转到模板详情页面',
  navigateToHome: '导航到首页',
  jumpHome: '跳转首页',
  goHome: '跳转首页',
  redirectToLogin: '重定向到登录页',
  switchTab: '切换Tab选项卡',
  backHome: '回到主页'
}

场景四:数据的加工

这类场景在处理列表的时候经常会碰到,比如排序、过滤、添加额外的字段、根据ID和索引获取特定数据等。

  1. 根据特定属性获取属性 模板:getXxByYy()

    其中 Xx 可以是:element, item, option, data, selection, list, options 以及一些特定上下文的名字,比如:user(s), menu(s) 等。Yy 相对来说比较固定,经常用到的就是 id, index, key, value, selected, actived 等。

除了使用 get,还可以使用 query 和 fetch,但是需要注意和上面提到的异步数据处理作一个区分。

{
  getItemById: '根据ID获取数据元素',
  getItemsBySelected: '根据传入的已选列表ID来获取列表全部数据',
  queryUserByUid: '根据UID查询用户'
}
  1. 情形二:格式化数据 这里的格式化操作包括排序、调整数据结构、过滤数据、添加属性。命名通常使用 formatXx, convertXx, inverseXx, toggleXx, parseXx, flatXx, 也可以结合数组的一些操作方法来命名,比如 sliceXx, substrXx, spliceXx, sortXx, joinXx 等来命名。
{
  formatDate: '格式化日期',
  convertCurrency: '转换货币单位',
  inverseList: '反转数据列表',
  toggleAllSelected: '切换所有已选择数据状态',
  parseXml: '解析XML数据',
  flatSelect: '展开选择数据',
  sortByDesc: '按降序排序'
}

数组命名

数组的命名推荐使用复数形式来命名,还有就是名词和具有列表意思的单词组合。常见的词汇有 options, list, maps, nodes, entities, collection 等。

{
  users: '用户列表',
  userList: '用户列表',
  tabOptions: '选项卡选项',
  stateMaps: '状态映射表',
  selectedNodes: '选中的节点',
  btnGroup: '按钮组',
  userEntities: '用户实体'
}

选项元素、下拉元素命名

主要针对的是在下拉选择框、选项卡元素、Radio、Checkbox等数据源每个选项数据的命名。常见的词汇有:title, name, key, label, field, value, id, children, index, nodes 等。

基中 title/name/key/label/field 作为选项显示名, value/id 用于唯一标识选项,children/nodes 用于包含子节点内容。如果选项元素的语义很明确的情况下也可以直接使用特定单词来代替提到的这些泛指的词汇,例如菜单列表就可以使用 menu 来作为显示名。

// 最常见组合
{
  title: '标题',
  value: 'ID值'
}

// 组合二
{
  label: '标签名',
  value: 'ID值'
}

// 组合三
{
  name: '元素名',
  id: 'ID值'
}

// 组合四
{
  field: '字段',
  value: '标识',
  index: '索引'
}

当前选项、激活项命名

适用列表的选中项、菜单选中项、步骤操作的当前进行步骤、页面路由当前路由等的命名。

{
  activeTab: '当前选中选项卡',
  currentPage: '当前页',
  selectedData: '当前选项中数据',
}

临时数据、比对数据命名

针对在代码中有时会使用一些临时的变量来存储数据、保存数据快照的场景下的命名。

{
  swapData: '临时交换数据',
  tempData: '临时数据',
  dataSnapshot: '数据快照'
}