【发布时间】:2015-06-01 06:49:59
【问题描述】:
我正在尝试理解 Flux 模式。
我相信,在任何好的设计中,应用程序都应该由相对独立且通用(因此可重用)的组件组成,这些组件通过特定的应用程序逻辑粘合在一起。
在 Flux 中有特定领域的 Store 封装数据和领域逻辑。这些可能会在同一域的另一个应用程序中重用。
我认为还应该有特定于应用程序的商店来保存应用程序状态和逻辑。这是胶水。
现在,我尝试将其应用于虚构的“GPS Tracker”应用:
...
当用户点击[Stop Tracking]按钮时,对应的ViewController会引发STOP_CLICK。
-
AppState.on(STOP_CLICK):dispatch(STOP_GEOLOCATION)dispatch(STOP_TRACKING)
-
GeolocationService.on(STOP_GEOLOCATION):stopGPS(); this.on = false; emit('change')
-
TrackStore.on(STOP_TRACKING):saveTrack(); calcStatistics(); this.tracking = false; emit('change')dispatch(START_UPLOAD)
所以,我有一个事件滚雪球。
据说在 Flux 中一个 Action 不应该引发另一个 Action。 但我不明白这是怎么做到的。
我认为用户操作不能直接转到域商店,因为这些应该与 UI 无关。 相反,AppState(或应用逻辑所在的任何位置)应该将用户操作转换为域操作。
- 如何重新设计这种 Flux 方式?
- 应用程序逻辑应该去哪里?
- 尝试保持域存储独立于应用程序逻辑是否正确?
- “服务”的地方在哪里?
谢谢。
【问题讨论】:
标签: reactjs-flux flux