我一开始在学 Vuex 的时候,觉得很难懂,不知道它是在做什麽的。当时的我,就想先追朔单一资料流的始祖(应该是吧?) flux
它提出了不少更新画面的理论与观念,之後的 Redux 和 Vuex 使用的专有名词,都和它的用词有相关性。
撰写本文时 flux 已进入维护模式,不建议使用了。
整体的模型长这样。
由於这是 facebook 出的 pattern 所以上面都会讲要和 React 整合。
这个图的出发点在 User Interactions 网页和使用者互动的时候,会呼叫 Action Creators ,在此处理非同步的 Web API 取得远端服务器上的资料。
经过中间的辗转,将资料储存在 Store。再经过 Change Events + Store Queries 将资料更新到画面上。
其实,只要宣告一个全域变数或物件,甚至做出 getter/setter 的抽象给物件使用,就足以管理这些全域的资料了,为什麽还要「单一资料流」呢?
其实,最主要的原因在於方便 debug ,如果一切都顺利,是不是单资料流似乎不是这麽重要,但是万一出错了,是不是单一资料流就会是一件很重要的事情,它会将很多连续执行的资料设定,弄成由 dispacher 处理,一次处理一个。并且可以透过开发者工具看见。
透过一步一步的查询,可以看得见哪一次赋值不如预期,所以造成问题。
在 AngularJS 中就有出现广播的方式,每次呼叫都会通知程序码呼叫它注册好的 callback,而 dispatcher 其实是一种广播系统,它限缩在一个可控的状况。让各处都可以呼叫注册好的 callback。
虽然语法相同,但是用法不同,就会造成灾难。
由於是广播系统,所以有些人的用法就是直接从这个 view 呼叫另一个 view 的 method ,为的是原本更新资料没有更新到的画面,可以强制更新。
但也许更新资料本身并没有遵守 immutable 的原则,所以才会出问题,而不需要呼叫强制更新。造成不必要的耦合。
AngularJS 也有 service 来处理共用的程序码。但是正因为在那个时候也许单一资料流还不是显学,所以没有把这个东西做成一个套件。所以用 service 只是用来共用的人,就很难管理修改资料的前後顺序与除错的问题。
使用了 dispatch 来呼叫 action
使用了 commit 来呼叫 mutation
使用了 getters 来呼叫 getters
使用了 state 来呼叫 state
接下来会花几天的时间,慢慢的介绍,我自己如何看待 vuex 以及如何使用它。
<<: Day 25. Hashicorp Vault: Diagnose Vault server
今天来实作一个 Decorator 的例子,当我们在画面上有一个按钮,想要透过点击该按钮触发 sho...
GitHub:https://github.com/dannypc1628/Angular-Tou...
对於「台大、中兴事件」的看法 身为毕业多年,曾在世俗定义的中庸学校跟好学校都待过的我,看到这事件只...
前言 前两天,我们知道了何谓 Component 、 Component 如何撰写与 React 开...
接下来就进到Lab环节了,不过第一个会比较简单,有点像是热热身,熟悉一下python和前後端程序 首...