灵活与可靠
作为开发者,我们都希望自己的代码既灵活又可靠。可惜事与愿违,灵活与可靠二者难以兼得,要么很灵活,写起来很方便,但是经常出现问题;要么很可靠,但是写起来很麻烦,可能改个文字也得动百十行代码。
Vue 的整体设计思路偏向前者,也就是灵活。Vue 主体程序很小,主要实现数据双向绑定的部分,其它功能大多需要配合其它库实现。这就留给我们很大的自主选择的空间。
在使用 Vue 的过程中,我们通常面临以下选择:
1. 组件库 vs 自己实现组件
Vue 刚开始兴起,组件库就也冒了出来。是否要在项目中使用组件库,我认为不能一概而论。
组件库是对业务的抽象。业务没定下来,抽象得太早,反而增加开发成本。大规模的组件库一般面向通用需求,在面对具体需求时经常成为制肘。所以我认为:
- 不要直接上大组件库,先以 Vue 的灵活性完成需求
- 个别稳定的抽象可以用组件库,比如 Modal、Tab、Typeahead 等
随着需求丰富,功能稳定,总有一些交互会成为通用组件,这个时候自行抽象即可
要不要用
prop.sync
Vue 支持使用 v-model
把父组件的变量绑定给子组件,子组件只需要 $emit('input', val)
就能修改父组件的值。而 prop.sync
更进一步,它可以让父子组件双向访问和修改同一个变量。如果你的组件层次很多,那么使用这个功能让属性穿透会很方便。但一定要慎之又慎,因为它会使得你无法控制某些变量,很容易引发连锁反应。
使用这个特性的时候一定要清楚快捷操作之外的副作用,才能在问题出现时及时定位、修正。
3. 全局事件总线
同样值得注意的还是前文提到的全局事件总线。它很灵活,可以架在任意两个实例之间。但是一旦滥用,就会变得不可收拾,事件在不同组件之间流动、修改数值、甚至死循环。一份数据可能被修改得面目全非,难以维护。
使用这个特性也一定要慎重。