深入浅出Vue.js读后总结-最佳实践(2)

245 阅读3分钟

今天接着继续写,加油!学习贵在坚持,大家一起加油!

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向下传递,事件向上传递的,这样会让组件更容易理解,不要为了一时的方便而牺牲数据流向的简洁性。

之后的就是一些命名规则和风格规划了,我就不一一总结了,大家感兴趣可以自己去看