umi中使用dva
2021-11-24 本文已影响0人
jack钱
1.创建目录
在src中创建models文件夹,并导出model
@/models/index.ts
const model: any = {
namespace: 'model',
//数据
state: {
name: 'jack',
},
//异步修改数据
effects: {
*getName({payload}, { call, put, select }) { // payload参数
const data = yield call(requestFunction); //请求数据
yield put({
type: 'saveName', //调用reducers中的saveName
payload: data, //传入请求的数据
});
}
},
//同步修改数据
reducers: {
saveName(state = { name: '' }, { payload }): any { // state是当前状态的值,如果未被修改过,那么state为空,默认值为{ name: '' }。 payload 是调用dispatch时传过来的值。
return {
...state,
name: payload //请求到的数据
};
}
},
};
export default model;
2.在.umirc.ts或config.ts中增加配置项
dva:{}
3.在组件中使用
//connect 需要引入
import { connect } from 'umi';
//引入方法
const { dispatch, model } = props;
//链接:通过这种方式来把model层的数据传递到当前组件了
export default connect(
({ model }) => ({ //models文件夹connect.d.ts文件中导出的对象
model, //props.model等于model(model:namespace名称)
})
)(页面组件名);
//调用方法
dispatch({
type: 'model/saveName', // namespace/方法名
payload: {name:'rose'}, // 参数
});
4.组件案例
import { connect } from 'umi';
const Name = (props) => {
const { models } = props;
return (
<>
{models.name}
</>
);
};
export default connect(
({ models }) => ({
models,
})
)(Name);