Skip to content

Instantly share code, notes, and snippets.

@Yang03
Created July 23, 2019 05:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Yang03/5d3de65a5746646058dd7aa0cc3148b7 to your computer and use it in GitHub Desktop.
Save Yang03/5d3de65a5746646058dd7aa0cc3148b7 to your computer and use it in GitHub Desktop.
Abort Data Fetching in Effect HooK
const useDataApi = (initialUrl, initialData) => {
const [url, setUrl] = useState(initialUrl);
const [state, dispatch] = useReducer(dataFetchReducer, {
isLoading: false,
isError: false,
data: initialData,
});
useEffect(() => {
let didCancel = false;
const fetchData = async () => {
dispatch({ type: 'FETCH_INIT' });
try {
const result = await axios(url);
if (!didCancel) {
dispatch({ type: 'FETCH_SUCCESS', payload: result.data });
}
} catch (error) {
if (!didCancel) {
dispatch({ type: 'FETCH_FAILURE' });
}
}
};
fetchData();
return () => {
didCancel = true;
};
}, [url]);
return [state, setUrl];
};
@Yang03
Copy link
Author

Yang03 commented Jul 23, 2019

[{isLoading, isError, data}, doFetch] = useDataApi(url, null)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment