react+umi+dva+ts基础基础使用

官网链接

文件目录

page 页面 
	index.tsx
models  每一个model文件都是需要挂在dva实例上的才会生效
	demo.ts
sevices  写接口的(这里就不写了)
	demo.ts

实现一个简单的数据流向,将数据存储到dva,然后在页面使用

  • page/index.tsx
import { connect } from 'umi';
import { useEffect } from 'react';
import { Dispatch, Action } from 'redux';

interface demoProps {
	dispatch: Dispatch<Action<
		| 'Demo/addCount'
	>>
}

const View = (props:demoProps)=>{
	useEffect(()=>{
		let {count} = props.Demo
		props.dispatch({
			type:'Demo/addCount',
			payload:{count,count++}
			callback(){
				//获取回调的地方,如果需要操作返回的新数据
			}
		})
	},[])
	return(
	<h1>{props.Demo.count}<h1>
	)
}

connect(
	({Demo})=>{
		return Demo 
	},
	(dispatch)=>{
		return {dispatch}
	}
)(View)
  • models/demo.ts
import { Effect } from 'dva';
import { Reducer } from 'redux';
interface DemoStateType{
 	count: number,
}

interface DemoType{
	namespace: string,
  	state: DemoStateType,
  	effects:{
		addCount: Effect,
	}
	reducer:{
		setDemoState: Reducer
	}
}

export default Demo: Demotype{
	namespace:'Demo',
	state: {
		count: 0,
	},
	effects: {
		*addCount: ({payload,callback}{put,call,select})=>{
			//payload 接收到的数据
			//callback 将数据返回页面
			//put 用于调用reducer
			//call 用于调用seveice文件里的接口
			//select 可以获取所有模块中存储的值
			put({
				type:'setDemoState',
				playload
			})
		}
	},
	reducer: {
		setDemoState(state,{payload}){
			return {
				...state,
				...payload
			}
		}
	},
	subscriptions:{  //这里并没有使用
	    setup({ dispatch, history }) {
	        // 这里可以用return
	        <!-- 这里是整个model文件第一个执行的地方 -->
	        //return history.listen((location, action) => {
	          //  if (location.pathname === '/users') {
	            //    dispatch({
	                    // type是用来写effects的函数名
	              //      type: 'effects_fnName'
	               // });
	            }
	        })
	    }
	 }
}
}

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值