为什么加了request依赖项就会陷入死循环?
老师您好,
视频5分38秒 - 6分30秒没有听明白,为什么useEffect中加了request依赖项就会陷入死循环?
局部代码Home/index.tsx
const Home = () => { const [page, setPage] = useState(1); const [requestData, setRequestData] = useState(defaultRequestData); // 发送请求 const { request } = useRequest<ResponseType>(requestData); useEffect(() => { request().then(data => { console.log(data); }).catch(e => { console.log(e?.message); }) }, [requestData, request]); // 获取经纬度 useEffect(() => { ......
局部代码utils/useRequest.tsx
const request = (requestOptions?: AxiosRequestConfig) => { setData(null); setError(''); setLoaded(false); // 发送请求 return axios.request<T>({ url: requestOptions?.url || options.url, method: requestOptions?.method || options.method, params: requestOptions?.params || options.params, data: requestOptions?.data || options.data, signal: controllerRef.current.signal, // headers参数发送给后端 headers }).then(response => { setData(response.data); return response.data; }).catch((e: any) => { // localStorage中的token过期,删除token,重新登录 if(e?.response?.status === 403){ localStorage.removeItem('token'); navigate('/account/login'); } setError(e.message || 'unknown request error'); throw new Error(e.message); }).finally(() => { setLoaded(true); }); }
我的理解是Home页面不会一直重复渲染才对,request不会生成新的引用,所以没理解。
17
收起
正在回答
1回答
同学你好,这不遇上了经典的面试问题了么,其实就是useEffect的第二个参数是依赖的话useEffect在每次运行时会改变依赖产生新的(引用地址发生了变化)所以又会重新触发useEffect。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星