Flux是一款基于单向数据流的应用架构,其目的是更好地组织应用程序代码。
相比于传统的MV*而言,Flux强调单向,从而让整个数据流形成了闭环。
而在MV*中,数据流往往不会是单向的。
举个例子,Controller触发了model改动,从而触发View改动,但同时联动另一个Model改动,又再次触发View改动。
(Controller -> Model - > View -> Model -> View)
在Flux中,包含了四种元素
- Action - 动作消息
- View - 外部交互
- Store - 数据存储/动作处理
- Dispatcher - 转发消息
可以看到在这个结构下,数据流都是单向的,
View发送一个Action作为数据请求
Dispatcher根据Action意向,寻找适合的Store进行处理
Store根据请求更新数据,并广播更新事件
View接受到广播事件,并依据广播内容更新视图
整个流程并不会像MV*一样有事务的穿插
我们总是可以知道Action发生了什么以及将要发生什么。
但实际上,这种结构也存在一些弊端:
1. Action 与 Store
Store必然会于Action存在相互依赖(又或者说是ActionCreator)
因为Store需要依据Action进行活动。
2. 更多组件
实际上,我们至少需要五种组件去支持这种框架(四个元素+ActionCreator),也就意味着更多模板代码
当然,也不能会有十全十美