2 回答

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

TA貢獻1827條經驗 獲得超4個贊
我會說你應該使用鉤子實現。在 React 文檔中,建議使用它來執行副作用:
數據獲取、設置訂閱和手動更改 React 組件中的 DOM 都是副作用的示例。無論您是否習慣于將這些操作稱為“副作用”(或只是“效果”),您之前都可能在組件中執行過它們。(鏈接到報價)
還有一個需要考慮的因素。在鉤子實現中:
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]);
您使用了優化。您正在傳遞到鉤子中,這意味著該函數僅在其中一個值更改時運行。在第二個實現中,您將在每個輸入更改上運行獲取[loading, query]
以下是關于鉤子這一方面的 React 文檔的鏈接。
添加回答
舉報