稍微总结一下 dva 😜
使用 dva 已经四个月了吧,陆陆续续做了两三个项目,之前在非常恶心的傻逼公司 Kyligence,算是我的 dva 的启蒙地,那一天傍晚,不小心看到了 ant-tool,然后又看到了 antd,于是感觉我的前端有了一次不小的改变~ 😇
几个概念
上面是一张 dva 的图,component,state,dispatch,connect
都是与 redux 一样的概念,不过,dva 把 action -> reducer 拆分成了,**action -> model(reducer, effect,subscription)**,这一部分改变的还是很多的,让 dispatch 的写法方便了一万倍。
Model
一个简单的 model 是这样的:
1 | export default { |
namespace
可以简单的理解为 comboReducer 使用这个值作为 key,而且 namespace 最重要的地方是用在 dispatch(put)的时候
1 | // 假如 example 的 model 定义了 query 这个 effect 或者 reducer。 |
state
就是一个对象
subscriptions
顾名思义可以订阅一些事件,待续😆
effects
异步操作,这里使用了 redux-sagas,先举个例子吧,其实就是异步的action, 但是是使用 sagas 实现的,很好(niu)看(bi)。
1 | // ... |
(感觉丝毫不需要我用文字描述,顺着读完就知道是什么意思了,还是特么异步的)
select, put, call 这些概念是 sagas 里面的
reducer
修改 state 的地方
dva
dva 会对 dispatch 做一些处理,比如他要把 example/query 分成 example 下面的 query (effect/reducer)。
所以肯定要注册这个 model,才能让 dva 知道 example 的存在,
1 | import dva from 'dva'; |
其实 dva 出了 model 这个方法,还有其他的几个
1 | // 1. Init |
dev-cli
比较好用的东西,解决了新建 router,component,model 还要添加 dva 的配置的问题,生成 router, component 的同时会直接在 dva 配置中更新。
例子:
1 | $ dva g route product-list |