美文网首页
Vuex的正确打开方式

Vuex的正确打开方式

作者: bysir | 来源:发表于2019-04-28 15:08 被阅读0次

    有太多人不知道为什么要使用vuex,而使用它的目的还停留在“这是一个新技术,大家都在用,所以我也要用”

    vuex并不难编写,但用好却不容易,“过度封装”“过早优化”十分常见。

    如果你不知道为什么要使用它,那一定做不到用好它。所以这篇文章将解析vuex的优缺点,让你知道在什么情况下应该使用它,否则不该使用。

    先提出观点: 能放在组件中的状态就不要放在state里,state只保存全局数据

    任何东西有好也有坏,当好处大于坏处的场景下我们才应该使用它,vuex也是如此。

    所以在使用它之前 必须明了它潜在的缺点

    缺点

    • 代码会更加复杂,原本只需要写在一个组件里的代码,现在需要写在多个地方(store中申明并定义好action等,组件中引入store去使用),这也抛弃了单文件组件的优势。
    • 当组件使用了store中的数据,就意味着这个组件将不再是一个“无副作用”的组件,那么这个组件的可重用性将大打折扣。
    • Store只不过是一种全局变量,从一开始学习代码的时候有人就告诉我们: 不要去声明和操作全局变量,这将导致状态错综复杂让人头疼。
    • Vue组件的父子组件通讯机制(emit和props)很好, 能够完美的解耦各个组件, 请一定要优先使用这种通讯方式.

    为了避免诸多缺点 在使用Vuex之前有必要思考一下几点:

    1. 使用vuex是否会引入垃圾变量

    Store不会像组件一样有生命周期, 那么放在Store的状态(State)如果管理不好就会变成垃圾变量, 这也是能不能将变量放在Store中的重要判断条件.

    所以记得不再使用的State记得销毁.

    虽然JS也有GC, 但是和其他语言一样的, GC是有代价的, 如果能一个变量能简单的被销毁就应该及时销毁它, 正如Vue组件Destory机制存在的意义.

    但其实, Store中没有生命周期机制 也没有提供给用户简单的销毁状态的机制, 所以只能通过 a = null 这样的写法, 这样的写法是低效的, 所以如果当一个变量应该频繁的被创建/销毁时, 它就不应该放在Store里.

    2. 使用vuex会不会造成数据流错乱

    单向数据流这个理念在引入Vuex之后可能会被开发者打乱. 但单向数据流无疑是应该遵守的.

    Store既然是全局的, 那总会有人为了方便 在本来应该在子组件emit事件让父组件去请求api的场景下, 子组件直接使用vuex的action去操作了api.

    这样的坏处不然而喻:

    • 子组件无法解耦.
    • 数据流错乱, 违背了单向数据库原则
    • 多个地方都使用了vuex中的全局方法或状态,不易重构.

    我举的例子只是其一, 以"悲观"的心态来猜测开发者写出的代码, 最后的错乱程度可能是无法想象的.

    Store本身没有错, 但如果开发者用不好, 那就不要使用.

    如何正确的使用Vuex

    说了怎么多, vuex到底应该如何正确的打开?

    笔者有几个准则

    少用vuex

    最好的避免坏处的方式就是不用.

    人无完人, 谁也不能确定自己写出的代码是完美的, 说不定自以为完美的代码对于其他人来说就是乐色, 为了净化开发环境, 写越简单的代码被人吐槽的概率越小. 当然也是因为上帝喜欢简单 - 奥卡姆剃刀定律

    在项目中,vue提供的props, on和emit已经能满足90%的数据传递需求,这种传递方式是“无副作用”的, 应当优先使用.

    以"全局状态"的概念来小心看待vuex

    牢记全局状态的副作用, 只有在对比了各种实现方式后, 发现vuex还是最优解时才使用它.

    最后

    我的观点可能会有些许偏激或者是不正确, 希望能在下方评论区得到你的建议.

    相关文章

      网友评论

          本文标题:Vuex的正确打开方式

          本文链接:https://www.haomeiwen.com/subject/knoimqtx.html