import { useEffect, useRef } from 'react'; export function useAbortController() { const controllerRef = useRef(null); // 获取AbortSignal实例 const getSignal = () => { if (!controllerRef.current) { controllerRef.current = new AbortController(); } return controllerRef.current.signal; }; // 中止所有请求 const abortAll = () => { if (controllerRef.current) { controllerRef.current.abort(); controllerRef.current = null; } }; // 创建新的Controller,并中止之前的请求 const recreate = () => { abortAll(); controllerRef.current = new AbortController(); return controllerRef.current.signal; }; // 组件卸载时自动中止所有请求 useEffect(() => { return () => { abortAll(); }; }, []); return { getSignal, abortAll, recreate }; }