useEffect
是 React 中的一个 Hook,用于在函数组件中执行副作用操作,比如数据获取、订阅或手动更改 DOM 等。当组件挂载、更新或卸载时,useEffect
都会执行。
useEffect
,你可以将副作用操作与组件的渲染逻辑分离,使得代码更加清晰和易于维护。useEffect
会根据依赖数组自动决定何时执行副作用,无需手动管理组件的生命周期方法。useEffect
接受两个参数:
useEffect
会重新执行回调函数。当你需要在组件挂载后获取数据,或者在某些状态变化后执行某些操作时,可以使用 useEffect
。
当页面刷新后,useEffect
运行 API 请求。
页面刷新会导致组件重新挂载,从而触发 useEffect
中定义的副作用操作,包括 API 请求。
通常情况下,页面刷新后运行 API 请求是正常的行为,因为你需要获取最新的数据来渲染组件。如果你希望在某些特定条件下避免 API 请求,可以考虑以下方法:
import React, { useState, useEffect } from 'react';
function MyComponent() {
const [data, setData] = useState(null);
const [shouldFetch, setShouldFetch] = useState(true);
useEffect(() => {
if (shouldFetch) {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
setData(data);
setShouldFetch(false); // 设置为 false 以避免重复请求
});
}
}, [shouldFetch]);
return (
<div>
{data ? <div>{data}</div> : <div>Loading...</div>}
</div>
);
}
你可以使用缓存机制(如 localStorage
或 sessionStorage
)来存储已经获取的数据,从而避免重复请求。
import React, { useState, useEffect } from 'react';
function MyComponent() {
const [data, setData] = useState(null);
useEffect(() => {
const cachedData = localStorage.getItem('myData');
if (cachedData) {
setData(JSON.parse(cachedData));
} else {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
localStorage.setItem('myData', JSON.stringify(data));
setData(data);
});
}
}, []);
return (
<div>
{data ? <div>{data}</div> : <div>Loading...</div>}
</div>
);
}
希望这些信息对你有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云