导航
一个良好的命名规范能够在绝大多数中改善可读性和开发体验
# 正常/业务组件命名
person.vue
personDetail.vue
user.vue
userDetail.vue
# 公共组件
HAView.vue
HALayout.vue
// bad
<HaView title="title" />
// good
<ha-view title="title" />
userName, initialValuegetUserInfo(), handleClick()handle - 处理用户交互:handleSubmit()fetch - 获取数据:fetchUserData()show - 显示某些内容:showModal()toggle - 切换状态:toggleMenu()user-updated, form-submittedclose-modal, upload-successv-loading, v-focusv- 前缀userData, isLoadingis, has, can 等前缀:isVisible, hasPermissionMAX_COUNT, API_URL$ 和 _ 前缀,这些在 Vue 生态中有特殊含义<template>→ <script>→ <style>顺序编写,逻辑分层清晰。<!-- 推荐结构 -->
<template>
<div>{{ message }}</div>
</template>
<script>
export default {
data() {
return {
message: 'Hello'
}
} // Vue 2
setup() {
const message = ref('Hello');
return {
message
}
} // Vue 3
}
</script>
<style scoped>
div {
color: red;
}
</style>
- components
- props
- data
- watch
- computed
- created
- mounted
- activited
- update
- beforeRouteUpdate
- methods
// bad
v-bind:class="{'show-left':true}"
v-on:click="getListData"
// good
:class="{'show-left':true}"
@click="getListData"
<!-- good -->
<ul>
<li v-for="todo in todos" :key="todo.id">
{{ todo.text }}
</li>
</ul>
<!-- bad -->
<ul>
<li v-for="todo in todos">
{{ todo.text }}
</li>
</ul>
以下为两种解决方案
<!-- bad -->
<ul>
<li v-for="user in users" v-if="user.isActive" :key="user.id">
{{ user.name }}
</li>
</ul>
<!-- good -->
<ul>
<li v-for="user in activeUsers" :key="user.id">
{{ user.name }}
</li>
</ul>
<script>
computed: {
activeUsers: function () {
return this.users.filter(function (user) {
return user.isActive
})
}
}
</script>
<!-- bad -->
<ul>
<li v-for="user in users" v-if="shouldShowUsers" :key="user.id">
{{ user.name }}
</li>
</ul>
<!-- good -->
<ul v-if="shouldShowUsers">
<li v-for="user in users" :key="user.id">
{{ user.name }}
</li>
</ul>
Props 定义应该尽量详细
// bad
props: ['status']
// good
props: {
status: {
type: String,
required: true,
validator: function (value) {
return [
'syncing',
'synced',
'version-conflict',
'error'
].indexOf(value) !== -1
}
}
}