dva = React-Router + Redux + Redux-saga
Dva的数据流向:改变发生通常是通过用户交互行为或者浏览器行为(如路由跳转等)触发的,当此类行为会改变数据的时候可以通过 dispatch 发起一个 action,如果是同步行为会直接通过 Reducers 改变 State ,如果是异步行为(副作用)会先触发 Effects 然后流向 Reducers 最终改变 State。
Model对象的属性:
1.namespace: 当前 Model 的名称。整个应用的 State,由多个小的 Model 的 State 以 namespace 为 key 合成
2.state: 该 Model 当前的状态。数据保存在这里,直接决定了视图层的输出
3.reducers: Action 处理器,处理同步动作,用来算出最新的 State,在 dva 中,reducers 聚合积累的结果是当前 model 的 state 对象。通过 actions 中传入的值,与当前 reducers 中的值进行运算获得新的值(也就是新的 state)。
4.effects:Action 处理器,处理异步动作,Effect常被称为副作用,最常见的就是异步操作,Effect 是一个 Generator 函数,内部使用 yield 关键字,标识每一步的操作(不管是异步或同步)
5.Subscription:Subscription 语义是订阅,用于订阅一个数据源,然后根据条件 dispatch 需要的 action。数据源可以是当前的时间、服务器的 websocket 连接、keyboard 输入、geolocation 变化、history 路由变化等等。
connect的使用:connect 是一个函数,绑定 State 到 View,connect 方法传入的第一个参数是 mapStateToProps 函数,mapStateToProps 函数会返回一个对象,用于建立 State 到 Props 的映射关系
dispatch 方法:被connect 的 Component 会自动在 props 中拥有 dispatch 方法。可以通过以下方法来调用model中的effects
dispatch({ type: 'namespace/getList', payload })