问题导向
dva是什么?如何使用?如何结合umi使用?
如果你都有了答案,可以忽略本文章,或去umi学习地图寻找更多答案
学前必知
对react-redux有一定了解
what
dva是基于react-redux和redux-sage的封装
redux-sage用于在react-redux中处理异步函数,redux-sage则是基于generator的封装
不会redux-sage没问题,要会一点generator,类型promise的async await,请搜索相关文章
how
如果是使用umi3的脚手架安装项目,无需安装任何东西即可使用
在src → models创建一个user.js文件
umi约定这个为全局状态管理文件,当然,也可以写在模块中,使用的时候是通过命名空间来匹配。
导出一个对象,该对象有如下几个属性:
export default {
namespace: '', string,命名空间,通过它来区分调用的哪一个模块的状态管理
state: {
}, object,初始化状态,用于渲染视图
reducers: {
}, function-object,同步方法,用于修改初始化状态
effects: {
}, function-object,异步方法,用于请求接口,然后调用同步方法修改数据
subscriptions: {
} function-object,生命周期,应用启动时调用定义好的方法
}
effect异步方法的使用
put 调用同步方法
call 调用异步方法
select 获取参数
例子: 登录修改登录状态和用户名
user → login页面
点击登录时,验证字段后,通过props.dispatch派发请求,参数:type:user命名空间下的loginAsync方法,payload:账号密码。
umi中的props自带有dispatch了,无需再引入就可使用,使用connect获取状态,和redux一样
import React, {
useState } from 'react';
import {
history, useLocation } from 'umi';
import {
connect } from