使用 useEffect 修复 React 中的竞争条件
TIP
使用useEffect
的cleaUp
函数 修复 React 中的竞争条件
例如在数据请求中,如果请求条件变化过快可能发生此种情情况
jsx
useEffect(() => {
const abortController = new AbortController();
const fetchData = async () => {
setTimeout(async () => {
try {
const response = await fetch(`https://swapi.dev/api/people/${id}/`, {
signal: abortController.signal,
});
const newData = await response.json();
setFetchedId(id);
setData(newData);
} catch (error) {
if (error.name === 'AbortError') {
// Aborting a fetch throws an error
// So we can't update state afterwards
}
// Handle other request errors here
}
}, Math.round(Math.random() * 12000));
};
fetchData();
return () => {
abortController.abort();
};
}, [id]);