为什么加了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不会生成新的引用,所以没理解。
20
收起
正在回答
1回答
同学你好,这不遇上了经典的面试问题了么,其实就是useEffect的第二个参数是依赖的话useEffect在每次运行时会改变依赖产生新的(引用地址发生了变化)所以又会重新触发useEffect。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星