12. 带引号的特性值
非空 html 特性值应该始终带引号 (单引号或双引号,选你 JS 里不用的那个) 。正例:
在 HTML 中不带空格的特性值是可以没有引号的,但这样做常常导致带空格的特征值被回避,导致其可读性变差 。
<AppSidebar :style="{ width: sidebarWidth + 'px' }">复制代码反例:
<AppSidebar :style={width:sidebarWidth+'px'}>复制代码13. 指令缩写
都用指令缩写 (用 : 表示 v-bind: 和用 @ 表示 v-on:)正例:
<input @input="onInput" @focus="onFocus">复制代码反例:
<input v-bind:value=https://www.isolves.com/it/cxkf/bk/2021-03-10/"newTodoText" :placeholder="newTodoInstructions">复制代码三、推荐
1. 单文件组件的顶级元素的顺序
单文件组件应该总是让<script>、<template> 和 <style> 标签的顺序保持一致 。且 <style> 要放在最后,因为另外两个标签至少要有一个 。正例:
<!-- ComponentA.vue --><template>...</template><script>/* ... */</script><style>/* ... */</style>复制代码四、谨慎使用 (有潜在危险的模式)
1. 没有在 v-if/v-if-else/v-else 中使用 key
如果一组 v-if + v-else 的元素类型相同,最好使用 key (比如两个 <div> 元素) 。正例:
<div v-if="error" key="search-status"> 错误:{{ error }}</div><div v-else key="search-results"> {{ results }}</div>复制代码反例:
<div v-if="error"> 错误:{{ error }}</div><div v-else> {{ results }}</div>复制代码2. scoped 中的元素选择器
元素选择器应该避免在 scoped 中出现 。正例:
在 scoped 样式中,类选择器比元素选择器更好,因为大量使用元素选择器是很慢的 。
<template> <button class="btn btn-close">X</button></template><style scoped>.btn-close { background-color: red;}</style>复制代码反例:
<template> <button>X</button></template><style scoped>button { background-color: red;}</style>复制代码3. 隐性的父子组件通信
应该优先通过 prop 和事件进行父子组件之间的通信,而不是 this.$parent 或改变 prop 。正例:
Vue.component('TodoItem', { props: { todo: { type: Object, required: true } }, template: ` <input :value=https://www.isolves.com/it/cxkf/bk/2021-03-10/"todo.text" @input="$emit('input', $event.target.value)" > `})复制代码反例:
Vue.component('TodoItem', { props: { todo: { type: Object, required: true } }, methods: { removeTodo () { var vm = this vm.$parent.todos = vm.$parent.todos.filter(function (todo) { return todo.id !== vm.todo.id }) } }, template: ` <span> {{ todo.text }} <button @click="removeTodo"> X </button> </span> `})复制代码4. 非 Flux 的全局状态管理
应该优先通过 Vuex 管理全局状态,而不是通过 this.$root 或一个全局事件总线 。正例:
// store/modules/todos.jsexport default { state: { list: [] }, mutations: { REMOVE_TODO (state, todoId) { state.list = state.list.filter(todo => todo.id !== todoId) } }, actions: { removeTodo ({ commit, state }, todo) { commit('REMOVE_TODO', todo.id) } }}<!-- TodoItem.vue --><template> <span> {{ todo.text }} <button @click="removeTodo(todo)"> X </button> </span></template><script>import { mapActions } from 'vuex'export default { props: { todo: { type: Object, required: true } }, methods: mapActions(['removeTodo'])}</script>复制代码反例:
// main.jsnew Vue({ data: { todos: [] }, created: function () { this.$on('remove-todo', this.removeTodo) }, methods: { removeTodo: function (todo) { var todoIdToRemove = todo.id this.todos = this.todos.filter(function (todo) { return todo.id !== todoIdToRemove }) } }})复制代码附录
1. 推荐使用vs code进行前端编码,规定Tab大小为2个空格
- vs code配置
推荐阅读
- 五步掌握用VSCode进行高效Python开发
- Python开发必备:如何建立一个完美的项目工程环境
- 嘘,认真看!Layui一定是Java程序员必备后台前端框架
- 微信小程序开发:一篇文章掌握基础配置、基本语法和功能
- 微信小程序开发教程:WeUI一个专为微信小程序设计的UI框架
- 北方存茶要注意三点,台湾茶企三点刻将开发工业观光游
- JavaScript前端各种文件下载功能的实现
- web前端HTML高频面试题
- 一般公司或者团队是怎么进行代码开发并且部署到服务器上的?
- 如何掌握正则表达式这一开发利器,看这篇就够了