2 回答

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個贊
這取決于您的用例,您應(yīng)該采取哪種方法
在以下情況下獲取數(shù)據(jù)很有用useEffect
在某些生命周期(如初始渲染)中獲取數(shù)據(jù)
在某些 prop 更改時獲取數(shù)據(jù)
每隔一段時間獲取數(shù)據(jù),但設(shè)置訂閱或
setInterval
在下面的方案中,在處理程序中獲取數(shù)據(jù)很有用
根據(jù)用戶交互(如搜索按鈕單擊)、搜索輸入更改
由于您的案例是基于使用交互的,因此在處理程序而不是鉤子中實(shí)際調(diào)用API會更好,更受控制useEffect

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個贊
我會說你應(yīng)該使用鉤子實(shí)現(xiàn)。在 React 文檔中,建議使用它來執(zhí)行副作用:
數(shù)據(jù)獲取、設(shè)置訂閱和手動更改 React 組件中的 DOM 都是副作用的示例。無論您是否習(xí)慣于將這些操作稱為“副作用”(或只是“效果”),您之前都可能在組件中執(zhí)行過它們。(鏈接到報(bào)價)
還有一個需要考慮的因素。在鉤子實(shí)現(xiàn)中:
useEffect(() => {
if (!loading) return;
const fetchData = async () => {
const response = await fetch(
`https://api.github.com/search/repositories?q=${query}`
);
const data = await response.json();
setData(data.items);
setLoading(false);
};
fetchData();
}, [loading, query]);
您使用了優(yōu)化。您正在傳遞到鉤子中,這意味著該函數(shù)僅在其中一個值更改時運(yùn)行。在第二個實(shí)現(xiàn)中,您將在每個輸入更改上運(yùn)行獲取[loading, query]
以下是關(guān)于鉤子這一方面的 React 文檔的鏈接。
添加回答
舉報(bào)