useEffect
是 React 中的一个 Hook,它允许你在函数组件中执行副作用操作,比如数据获取(fetch)。使用 useEffect
可以确保在组件挂载、更新或卸载时执行特定的逻辑。
以下是一个使用 useEffect
和 fetch
的示例:
import React, { useState, useEffect } from 'react';
function DataFetchingComponent() {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error('Network response was not ok');
}
const result = await response.json();
setData(result);
} catch (err) {
setError(err);
} finally {
setLoading(false);
}
};
fetchData();
}, []); // 空数组表示只在组件挂载时执行
if (loading) return <div>Loading...</div>;
if (error) return <div>Error: {error.message}</div>;
return (
<div>
<h1>Data:</h1>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}
export default DataFetchingComponent;
useEffect
的依赖数组中包含了会导致组件重新渲染的状态或 props。useCallback
或 useMemo
来优化。useEffect
钩子同时执行,导致请求顺序不确定。AbortController
来取消未完成的请求。useEffect(() => {
const controller = new AbortController();
const signal = controller.signal;
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data', { signal });
if (!response.ok) {
throw new Error('Network response was not ok');
}
const result = await response.json();
setData(result);
} catch (err) {
if (err.name === 'AbortError') {
console.log('Fetch aborted');
} else {
setError(err);
}
} finally {
setLoading(false);
}
};
fetchData();
return () => {
controller.abort();
};
}, []);
通过以上示例和解释,你应该能够更好地理解和使用 useEffect
和 fetch
进行数据获取。
领取专属 10元无门槛券
手把手带您无忧上云