当前位置: 首页 > news >正文

一些基本的 Vue 规范

一、项目结构规范

推荐的目录结构

src/
├── assets/         # 静态资源(如图片、字体)
├── components/     # 全局组件
├── views/          # 页面组件(用于路由)
├── router/         # 路由配置
├── store/          # Vuex 状态管理
├── composables/    # 封装的可复用逻辑(Vue 3)
├── services/       # 接口请求逻辑
├── utils/          # 工具函数
├── App.vue         # 根组件
├── main.js         # 入口文件

二、组件命名规范

文件命名

  • 组件文件使用 PascalCase(大驼峰命名)或 kebab-case(短横线连接):
    • MyComponent.vue
    • my-component.vue
    • myComponent.vue

组件命名

  • 组件的 name 属性使用 PascalCase:
    <script>
    export default {name: 'MyComponent'
    }
    </script>
    

组件注册

  • 本地组件使用驼峰命名或短横线均可,但保持一致。
  • 全局组件建议使用 Base 前缀(如:BaseButton)表示通用组件。

三、模板规范(template)

模板结构顺序

组件结构推荐顺序为:

<template>
</template><script>
</script><style scoped>
</style>

使用简洁语法

  • 使用 v-bind: 简写:

    :src="imageUrl" 代替 v-bind:src
    
  • 使用 v-on: 简写:

    @click="handleClick" 代替 v-on:click
    

属性顺序

推荐顺序(Vue 官方 Style Guide):

  1. v-if / v-for / v-show
  2. ref / key / slot
  3. class / style
  4. v-model
  5. 事件 @click
  6. 其他自定义属性

四、脚本规范(script)

Composition API(Vue 3)推荐使用

<script setup>
import { ref } from 'vue'const count = ref(0)
</script>

Options API(Vue 2 / Vue 3兼容)

export default {data() {return {count: 0}},methods: {increment() {this.count++}}
}

方法命名

  • 方法应使用动词开头,表意明确:
    • fetchUserInfo
    • handleClick
    • data1

五、样式规范(style)

使用 scoped 避免样式污染

<style scoped>
.button {color: red;
}
</style>

命名规范

  • 使用 BEM 命名规范:
    .card {}
    .card__title {}
    .card--active {}
    

六、代码风格规范

Vue 官方推荐使用 ESLint + Prettier 来规范代码风格,常见配置有:

  • eslint-plugin-vue
  • @vue/eslint-config-prettier

示例 .eslintrc.js:

module.exports = {extends: ['plugin:vue/vue3-essential','eslint:recommended','@vue/prettier']
}

七、其他推荐规范

单文件组件长度

  • 一个 .vue 文件控制在合理行数(如 200 行以内)。
  • 逻辑复杂的可以拆分为多个组件或组合函数(composables)。

路由命名规范

  • 路由 name 建议与页面组件名一致,便于跳转维护。

使用 definePropsdefineEmits(Vue 3)

<script setup>
const props = defineProps(['title'])
const emit = defineEmits(['submit'])
</script>

相关文章:

  • NEUOJ网格路径
  • 变量在template里不好使,在setup好使?
  • 从并发问题衍生出的Spring的七种事务传播行为
  • 问题:raw.githubusercontent无法访问
  • 《解锁快速记忆法:开启高效学习的大门》
  • 消息中间件RabbitMQ02:账号的注册、点对点推送信息
  • 4.23学习总结
  • 如何设计一个实时数据同步方案
  • 抱佛脚之学SSM六
  • 集成电路过流保护:基于 hiccup 模式的设计与解析
  • MVCWebAPI使用FromBody接受对象的方法
  • Windows上使用Python 3.10结合Appium-实现APP自动化
  • Apache Flink 深度解析:流处理引擎的核心原理与生产实践指南
  • 2025.04.23华为机考第一题-100分
  • 数据库1个
  • Vue3速通笔记
  • QT软件安装(12)
  • VBA批量读取access数据库(.mdb)
  • 淘宝平台关键字搜索接口接入指南(含代码示例及商品标题解析)
  • 机器学习分类算法详解:原理、应用场景与测试用例
  • 美国证实加拿大及墨西哥汽车零部件免关税
  • 德国旅游胜地发生爆炸事故,11人受伤
  • 张炜琳已任三明市委常委、宣传部部长
  • 83岁连丽如每周登台说书,还上了15堂连派评书课
  • 人社部:将会同更多部门分行业、分领域制定专项培训计划
  • 下任美联储主席热门人选沃什:美联储犯下“系统性错误”,未能控制一代人以来最严重的通胀