Dva: Effect和Subscription可以再出一个经典的教程吗?

Created on 20 Jan 2017  ·  1Comment  ·  Source: dvajs/dva

个人水平比较差, Subscription和Effect, 看过写提问和demo, 还是没有理解掌握.

能否在浅显些讲解?

阅读参考来自:

  1. dva-knowledgemap
  1. Concepts

> 说明: 两个文档对Effect和 Subscription的讲解各有侧重, 只能合并起来看.

问题1:

图例中, 显示只有dispatch 和Subscription 可以触发Aciton,而Reducer和Effect则是接受Aciton,进行处理的作用. 可是文档中: Effect的 yield put 方法,也可以触发Action,

理解: 是否应该立即为: dispatch | Effect | Subscription ,3个都可以触发Aciton, 而不是图例的两个?

问题2

Reducer: 可以接收dispatch触发的Aciton 函数方式处理state, 也是可以唯一的改变state的地方.
Effect: 可以接收到dispatch触发的Aciton, 异步方式处理state, 但是不可以改变state.

理解:
由于 Reducer不可异步操作,也就是不能和server产生来往, 所以凡是异步的state操作都调用effect来完成.

也就是说Aciton需要同步处理state的就由Reducer完成,
Aciton需要异步处理的就由Effect完成,再由yield put触发Aciton,跳到Reducer里面改变state

问题3

Effects中描述 select 用于从 state 里获取数据。
理解: 用yield select(state => state.todos);方式, 是从项目的整个state树里面获取数据进行操作, 如同mapStateToProps一般绑定数据.

这样的理解对吗?不对是否给纠正一下?

question

Most helpful comment

问题1

  • 接收 action 的地方有:reducer 和 effect
  • 触发 action 的地方有:subscription、effect、被 connect 的 component、onError hook

问题2

理解正确。

问题 3

理解正确。

>All comments

问题1

  • 接收 action 的地方有:reducer 和 effect
  • 触发 action 的地方有:subscription、effect、被 connect 的 component、onError hook

问题2

理解正确。

问题 3

理解正确。

Was this page helpful?
0 / 5 - 0 ratings