今天接着继续写,加油!学习贵在坚持,大家一起加油!
5.Vuex和props的使用情况
相信很多人都想清楚了解何时使用Vuex的store获取状态,何时使用props接受父组件传来的状态。
通常,在项目开发中,业务组件会使用vuex维护状态,不同组件统一操作vuex中的状态。业务组件就是用来写业务的组件,哈哈哈,是不是优点废话,我的理解就是,比如这个页面是人员列表,然后你写的这个组件叫PersonList.vue,这就是业务组件。
一般对于通用组件会使用props。这样做的原因是通用组件会拿到各个业务组件中使用,它要与业务组件解耦,所以要使用props获取状态。
6.避免v-if和v-for一起用
这个我相信很多人都知道,vue官方强烈建议不要把v-if和v-for同时使用在一个元素上的。
分两种情况讨论:
(1)如果是想v-if判断整个元素是否应该渲染,这种情况就把v-if移动到容器元素上
(2)如果是真想过滤一个列表中的数据,那么推荐在v-for之前就把数据通过计算属性过滤完
为什么需要先过滤呢?
因为当vue处理指令是v-for比v-if优先级更高,在源码中也可以看到,v-for的else if在v-if的else if之前,所以肯定是先处理v-for,所以即使我们只要过滤后的那部分数据,也会重新遍历整个列表。
提前过滤会有以下好处
(1)过滤后的数据只有在发生变化后才会重新运算(计算属性的特点)
(2)v-for只遍历过滤后的数据,渲染更高效
(3)数据过滤与渲染层解耦,可维护性更强(数据过滤写在计算属性中)
7.为组件样式设置作用域
这个大家应该也熟悉,因为css的规则是全局的,任何一个组件的样式规则都对整个页面有效,所有除了顶级App组件中的样式可以全局的,其他所有组件都应该是有作用域的。
本书提供了两种方法来给组件样式设置作用域:
(1)scoped特性(这个感觉比较常用)
<!--使用scoped特性-->
<style scoped>
.button{
border:none;
}
</style>
(2)CSS Moudules(这个我不知道,是一个基于class的类似BEM的策略)
BEM:Block Element Modifier的首字母缩写,是一种css的命名规范,一般写作.block__element--modifier。一个好的css命名规范可以减轻代码阅读的难度,实际的缩短开发速度,减轻后期维护和迭代的难度。
<!--使用CSS Modules特性-->
<style module>
.button{
border:none;
}
</style>
作者还说,对于组件库,我们应该更倾向于选用基于class的策略而不是scoped特性。因为基于class册罗使覆写内部样式更容易,它使用容易理解的class名称且没有太高的选择器优先级,不容易导致冲突。
8.避免在scpoed中使用元素选择器
在scoped中,类选择器比元素选择器好,因为大量使用元素选择器是很慢的。
因为在vue中,为了给样式设置作用域,vue会给元素添加一个独一无二的attribute,我相信大家都经常看到,data-v-f3f3eg9,只有带个这个attribute才会生效,如button[data-v-f3f3eg9],而元素选择器和attribute组合的选择器会比类选择器和attribute组合的选择器慢,所以尽可能使用类选择器。
9.避免隐性的父子组件通信
一个理想的vue应用是prop向下传递,事件向上传递的,这样会让组件更容易理解,不要为了一时的方便而牺牲数据流向的简洁性。
之后的就是一些命名规则和风格规划了,我就不一一总结了,大家感兴趣可以自己去看