记录一下Vue 2 业务代码的最佳实践
1. 禁用Watcher
为什么禁用Watcher? 在我看来,Watcher在Vue中完全是多余的存在。它的缺点很多,优点几乎没有。 先说优点,优点就是写代码快。不需要逻辑,什么都是Watch就行了。比如,我在我们合同工的代码中看到很多Watcher,这对于快速开发确实是优点。因为不需要过多考虑逻辑,只要值变了,就执行函数就行了。 至于缺点有很多:
错误的暗示一个Watcher自带暗示:被Watch的变量可以被任何东西改变,换句话说你不知道这个值将会被什么改变。这在维护的时候非常麻烦,你要经常通读代码来判断如何修改相关的业务。 如何解决? 去掉Watcher,用v-if控制组件载入并在子组件的Created()钩子内处理相关业务。另外要善用Computed,善用emit派发event来改变值。这样数据流比较清晰。总之尽量做到每个值的改变都有迹可循。混乱嵌套的Watcher只要多用Watcher就能创造更多Bug,听起来像一个优点,对程序员来说可以多创建点Bug ticket。这种代码是这么写的,先Watch A,再Watch B并且在修改B的时候顺便修改一下A的属性,然后在修改A的时候顺便在修改一下B的属性,最好再修改一个八杆子打不着的变量C,然后再Watch下C再改一下其它值。还不够完美,在滥用Wather这方面有人肯定能比我写的专业。难于测试对,就是在写测试的时候会遇到很多困难,有时候Watcher在测试内是不能被激活的。这里不再赘述。当然如果你不写测试程序就没有这个问题。
2. 禁用Vuex
Vuex, 又是一个生造出来的东西。什么大项目用,中小项目不用之类的说法都是错误的。不懂的人最喜欢这个忽悠,你细问他有说不出个所以然来。我的结论是什么代码都不要用。
这个东西是过度设计以及设计错误。为什么这么说,一旦你使用Vuex了,就代表你的组件设计一定出了问题。当然这么一顿批评它的缺点到底在哪里呢?
逻辑混乱有人肯定说这东西用好了就怎么怎么样,用不好才会怎么怎么样。错,我告诉你这东西没法用好,不要用。随着代码量的增加Vuex会使你的代码逻辑变得非常混乱。这个Vuex就是一个全局变量,而且满天飞。维护的时候要花很多时间,尤其是多个程序员维护一份代码,自己搞自己的,过了一段时间代码就会变得没法看。而且没人敢乱改,一改可能就全塌了。难于测试写测试的时候要引入更多多余的mock。而且有些在Vuex里面触发的事件根本无法测试导致你无法写出正确的测试。如果你在测试内派发事件,那么这个测试就是无效测试。因为你的代码逻辑改了测试还是能够通过。
另外更详细的论述见这篇文章juejin.cn/post/708239…
3. 禁用Mixin
Mixin又有什么问题?
Mixin最大的问题就是带来代码的逻辑混乱。使用了Mixin的代码维护更加困难,还不如export函数易于阅读。
如果是mix组件的hook那将是个灾难。
我觉得Mixin只有一个时候可以用用就是多组件共用同一个Prop的时候。其它时候真的可以不用了。
4. 尽量不要在HTML内用Form tag
会引起错误的提交并且导致Vue地址栏胡乱添加问号。
5. 多用Computed计算属性
这里的多用意思是,你觉得不能用的时候也要想办法用。 Computed属性有很多优点。它就像一个只读变量(如果我们不用setter的话)。计算属性的存在给Vue程序员减少了很多心智负担。你会发现有时候可以把变量放入Data(),似乎用计算属性也行。那么首选计算属性。
6. 禁用functional组件
这种组件的目的是提高渲染性能,但是它的最大问题是根本没有提高任何性能。使用这种组件可维护性急转直下,直接掉到零,给后期维护带来大麻烦。另外,如果你真的企图依赖创建几个函数式组件来改进性能,那基本就是说明你的整个工程设计出现了问题。
老生常谈的跟别人一样的部分我就尽量不提了,没意思。先写这么多,回头再添加。