用自定义 hooks 管理请求状态

用自定义 hooks 管理请求状态

  1. 创建 hooks
interface State<D> {
	data: D | null;
	error: Error | null;
	stat: 'loading' | 'success' | 'error' | 'idle';
};

const defaultState: State<null> = {
	data: null,  // 数据
	error: null,  // 错误信息
	stat: 'idle',  // 状态
};
export const useAsync = <D>(initState?: State) => {
	const [state, setState] = useState({
		...defaultState,
		...initState
	});
	const setData = (data: D) => {
		setState({
			data,
			error: null,
			stat: 'success'
		})
	};
	const setError = (error: Error) => {
		setState({
			data: null,
			error,
			stat: 'error'
		})
	};
	const run = (promise: Promise) => {
		if(!promise | !promise.then){
			throw Error("请向run方法中传入promise对象")
		}
		promise.then((data) => {
			setData(data);
			return datal
		})
		.catch((error) => {
			setError(error);
			return error;
		})
	}
	return {
		setError,
		setData,
		run,
		...state
	}
}
  1. 使用 hooks
const { run, data, stat } = useAsync();

run("此处可以是执行的网络请求")

// 之后将 data, stat 交给组件使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值