美文网首页
umi: 自定义hook,在react组件销毁时,取消所有ped

umi: 自定义hook,在react组件销毁时,取消所有ped

作者: 夏知寒 | 来源:发表于2023-01-02 17:46 被阅读0次

useCancelable.ts

import { useEffect, useCallback } from 'react';

let apis: AbortController[] = [];
const useCancelable = () => {
  const signFn = useCallback(
    <P, R>(fn: (args: P) => R) =>
      (args: P) => {
        const controller = new AbortController();
        const { signal } = controller;
        apis.push(controller);
        return fn.apply(null, [{ ...args, signal }]) as R;
      },
    [],
  );

  useEffect(() => {
    return () => {
      apis.forEach((controller) => {
        controller.abort();
      });
      apis = [];
    };
  }, []);

  return { signFn };
};

export default useCancelable;

proRequest.ts

import { request } from 'umi';
import type {
  RequestOptionsWithResponse,
  RequestResponse,
  RequestOptionsWithoutResponse,
  RequestOptionsInit,
} from 'umi-request';

interface RequestMethodInUmi<R = false> {
  <T = any>(
    url: string,
    options: RequestOptionsWithResponse & { skipErrorHandler?: boolean },
  ): Promise<RequestResponse<T>>;
  <T = any>(
    url: string,
    options: RequestOptionsWithoutResponse & { skipErrorHandler?: boolean },
  ): Promise<T>;
  <T = any>(
    url: string,
    options?: RequestOptionsInit & { skipErrorHandler?: boolean },
  ): R extends true ? Promise<RequestResponse<T>> : Promise<T>;
}
const proRequest: RequestMethodInUmi = (url: string, options: any) => {
  const signal = (options?.data || options?.params).signal;
  delete (options?.data || options?.params).signal;
  return request<RequestMethodInUmi>(url, {
    ...options,
    signal,
  });
};

export default proRequest;

使用方法:
函数组件内

const {signFn} = useCancelable();

signFn(apiFn);

services里使用proRequest替代umi-request

相关文章

  • 学习react hook的总结

    react16推出了react hook,react hook使得functional组件拥有了class组件的一...

  • 自定义hook复用组件代码

    概念: 自定义hook是react中最新的组件代码复用方案注意点: hook必须以use开头,并需要使用别的hoo...

  • react组件的生命周期

    组件的生命周期 组件在react的生命周期中主要经历三个阶段:实例化、存在期和销毁时。React.js在组件生命周...

  • react hook介绍

    react hook是什么 react hook是react中引入新特性,它可以让react函数组件也拥有状态;通...

  • React Hook介绍与使用心得

    关于React Hook React Hook 对于React来说无疑是一个伟大的特性,它将React从类组件推向...

  • 前端可视化拖拽方案

    技术栈:react+dva+less+umi+antd+node+ sortable umi:组件库设计考虑的一个...

  • 07-04-函数组件及Hooks

    课程目标 掌握函数组件的创建与使用; 掌握 React 常见 Hooks 使用; 掌握如何自定义 Hook。 课程...

  • 注意事项

    一、如果在组件中做了订阅,即subscribe,那么在组件销毁OnDestroy时,需要取消订阅,即执行unsub...

  • React Hook

    Hook 是能让你在函数组件中“钩入” React 特性的函数(hook是react16.8的新增特性,让函数组件...

  • react中常见hook的使用方式与区别

    1、什么是hook?react hook是react 16.8推出的方法,能够让函数式组件像类式组件一样拥有sta...

网友评论

      本文标题:umi: 自定义hook,在react组件销毁时,取消所有ped

      本文链接:https://www.haomeiwen.com/subject/euqkcdtx.html