DVA 是基于 redux、redux-saga 和 react-router 的轻量级前端框架及最佳实践沉淀。前端
理解dva跟其余技术实现的对应关系,有利于深刻理解dva。react
平常react开发过程当中,咱们常常会遇到如下场景:redux
这些需求,dva都知足了:安全
为何使用dva,而不选择redux,最重要的缘由是dva用法简单,能够下降团队成员的学习成本。前端框架
相比redux,dva真的能够算很是简单,咱们来看看基本概念。react-router
其中,model 是 DVA 中最重要的概念,基本的属性以下:框架
熟悉react开发的你,应该知道状态控制一直是react的一个难点。异步
咱们能够把子组件的 state 能够上提,由父组件来管理:函数
固然,dva给了咱们另外一种可能,就是把state上提到全部React子组件之上,过程相似:学习
要达到上述效果,咱们就必须想办法将React跟dva这两个平行世界关联起来,connect
粉墨登场。connect是链接dva跟React的关键,必定要重点理解。
dva中的connect
,采用的是装饰器的写法,所谓装饰器,就是给装饰对象赋予它原本不具有的能力。connect
的存在,就是为了让组件获取两样东西:model中的数据,驱动model改变的方法。
connect 接收两个参数,作的就是这两件事:
其中,mapStateToProps
字面含义就是把dva model中的state经过组件的props注入给组件。
而mapDispatchToProps
字面含义就是将dispatch方法经过组件的props注入给组件。使用mapDispatchToProps跟dispatch向组件注入方法,组件使用这些方法能给dva model发送消息。
这里就不得不提下dispatch,dispatch 函数就是和 dva model 打交道的惟一途径。 dispatch 函数接受一个 对象 做为入参,在概念上咱们称它为 action,惟一强制要包含的是 type 字段,string 类型,用来告诉 dva 咱们想要干什么。
终于轮到action上台了。咱们把想作的事情经过 action 描述出来,并经过 dispatch 告诉 dva model,而对这个消息的处理就是 dva 的事情了。
咱们经过dispatch派发了action,如今问题来了,dva如何识别并执行action呢?
这就是reducer要作的事情。
dva model 中能够定义一个叫作 reducers 的成员用来响应 action 并修改 state。每个 reducer 都是一个 function,action 派发后,经过 action.type 被惟一地匹配到,随后执行函数体逻辑,返回值被 dva 使用做为新的 state。state 的改变随后会被 connect 注入到组件中,触发视图改变。
咱们再回过头来看上文提到的model基本属性:
dva的用法,其实都是围绕着这些基本属性展开,本人但愿读者能够加深对这些属性的理解。
最后,上一张dva官方的代码示例图吧: