dva框架对用户可以说是非常的友好的,它只有6个API。

  • use 注册所需要使用的插件
  • model 挂载所需要的模块
  • router 挂载路由
  • start 项目的启动
  • unmodel 清除模块
  • replaceModel 替换模块

Model API

model 语义化理解模块,其实model就相当于react中的redux仓库一样,但是它又跟vuex里面的执行机制很相似下面简单介绍一下model中都有那些东西:
注意:在编写自定义模块的时候,模块中添加字段 namespace:模块名

1、state

state这个东西已经是再熟悉不过了,它里面存放一些全局需要的状态或数据,来供全局使用,

2、effects

effect 中文就是效率,效应的意思,它的作用就相当于vuex中的 actions 的机制一样执行一些异步操作,异步代码,和修改state中的转态,他会接收两个参数,actions 和 callback actions它是一个Promise对象,callback就是一些回调函数,这个作为了解。在编写的过程当中代码如下:

  1. *save({ payload }, { call, put, }) {
  2. //第一个参数解构一个payload,第二个参数解构一个call,put,
  3. //payload 它就是调用 save 函数时传递的参数,
  4. //使用call put 是前面要加 yield
  5. },

假设:effect中有两个函数,a、b 想要在a中调用b 同样的操作

  1. effects: {
  2. *a({ payload }, { call, put }) {
  3. yield put({
  4. type:'a'
  5. })
  6. },
  7. *b({ payload }, { call, put, }) {
  8. console.log('在a中调用的')
  9. },
  10. },

3、reducers

reducer相当于vuex中的 motations 的作用是相同的,它只提供修改 state状态的函数,但不是真正意义上的修改state,需要在effect中调用函数才能达到状态的修改,说到这里越来越感觉这是不是第二个vuex呢?太相似了。

  1. effects: {
  2. //注册
  3. *registerUser({ payload }, { call, put }) {
  4. yield put({
  5. type:'changeState',
  6. payload:{
  7. //传递参数
  8. }
  9. })
  10. },
  11. }
  12. reducers: {
  13. //修改状态
  14. changeState(state, action) {
  15. //state是当前所保持的状态
  16. //action是调用函数传递的参数
  17. return {//使用ES6解构的方法,修改数据
  18. ...state,
  19. ...action.payload
  20. };
  21. },
  22. },

下载包

  1. cnpm i @babel/preset-react @babel/plugin-proposal-decorators -D

配置.babelrc

  1. {
  2. "presets": [
  3. "@babel/preset-react",
  4. "react-app"
  5. ],
  6. "plugins": [
  7. [
  8. "@babel/plugin-proposal-decorators",
  9. {
  10. "legacy": true
  11. }
  12. ]
  13. ]
  14. }