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就是一些回调函数,这个作为了解。在编写的过程当中代码如下:
*save({ payload }, { call, put, }) {//第一个参数解构一个payload,第二个参数解构一个call,put,//payload 它就是调用 save 函数时传递的参数,//使用call put 是前面要加 yield},
假设:effect中有两个函数,a、b 想要在a中调用b 同样的操作
effects: {*a({ payload }, { call, put }) {yield put({type:'a'})},*b({ payload }, { call, put, }) {console.log('在a中调用的')},},
3、reducers
reducer相当于vuex中的 motations 的作用是相同的,它只提供修改 state状态的函数,但不是真正意义上的修改state,需要在effect中调用函数才能达到状态的修改,说到这里越来越感觉这是不是第二个vuex呢?太相似了。
effects: {//注册*registerUser({ payload }, { call, put }) {yield put({type:'changeState',payload:{//传递参数}})},}reducers: {//修改状态changeState(state, action) {//state是当前所保持的状态//action是调用函数传递的参数return {//使用ES6解构的方法,修改数据...state,...action.payload};},},
下载包
cnpm i @babel/preset-react @babel/plugin-proposal-decorators -D
配置.babelrc
{"presets": ["@babel/preset-react","react-app"],"plugins": [["@babel/plugin-proposal-decorators",{"legacy": true}]]}
