标签:shop const name dva namespace ts state model umi
umi + ts 配合使用 dva model
import { connect } from 'umi' 生效条件
1. model文件需放置在 src/models下
2. umi会识别符合条件的models文件
开启dva: .umirc.ts中配置
export default defineConfig({
...,
dva: { // 配置自己需要的设置即可
immer: true,
hmr: true,
},
});
model文件:src/models/shop.ts
import { Effect, ImmerReducer, Reducer, Subscription } from 'umi';
const namespace = 'shop'
export const namespace_shop = namespace
interface ModelState {
name: string;
}
interface ModelsType {
namespace: typeof namespace;
state: ModelState;
effects: {
query: Effect;
};
reducers: {
save: Reducer<ModelState>;
// 启用 immer 之后
// save: ImmerReducer<IndexModelState>;
};
subscriptions: { setup: Subscription };
}
const ShopModels: ModelsType = {
namespace,
state: {
name: 'shop',
},
effects: {
*query({ payload }, { call, put }) {
yield put({
type: 'save',
payload: { name: '慧慧' }
})
},
},
reducers: {
save(state, action) {
return {
...state,
...action.payload,
};
},
},
subscriptions: {
setup({ dispatch, history }) {
return history.listen(({ pathname }) => {
if (pathname === '/shop') {
dispatch({
type: 'query',
})
}
});
}
}
};
export default ShopModels;
页面page文件:index.ts
import React, { Component, FC } from 'react';
import { connect, Dispatch, ConnectProps, namespace_shop} from 'umi';
const MODELS_NAME = namespace_shop
interface PageProps extends ConnectProps {
name: string;
loading: boolean;
dispatch: Dispatch
}
interface PageSate {}
class IndexPage extends Component <PageProps, PageSate> {
handleChangeName = () => {
this.props.dispatch({
type: `${MODELS_NAME}/save`,
payload: {
name: 'hahahha'
}
})
}
render() {
const { name = '' } = this.props
return <div onClick={() => this.handleChangeName()} >Hello {name}</div>;
}
}
const mapState = (state: any) => {
return {
...state[MODELS_NAME],
loading: state.loading.models[MODELS_NAME]
}
}
export default connect(mapState)(IndexPage);
标签:shop,const,name,dva,namespace,ts,state,model,umi 来源: https://blog.csdn.net/xueer43/article/details/111995522
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。