diff options
| author | lazydancer <jrpucula@gmail.com> | 2024-12-22 17:33:11 -0500 |
|---|---|---|
| committer | lazydancer <jrpucula@gmail.com> | 2024-12-22 17:33:11 -0500 |
| commit | 2c5b7da8165e3f8b90748e8ced1de0e3e8d52309 (patch) | |
| tree | 6d6e4e1d0cb0c7ec5e1dff83bfeda4b044258b81 /frontend/src/usePolling.js | |
| download | haul-2c5b7da8165e3f8b90748e8ced1de0e3e8d52309.tar.gz | |
Initial
Diffstat (limited to 'frontend/src/usePolling.js')
| -rw-r--r-- | frontend/src/usePolling.js | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/frontend/src/usePolling.js b/frontend/src/usePolling.js new file mode 100644 index 0000000..3081312 --- /dev/null +++ b/frontend/src/usePolling.js @@ -0,0 +1,32 @@ +// usePolling.js +import { useState, useEffect } from 'react'; + +const usePolling = (url, interval) => { + const [data, setData] = useState(null); + const [error, setError] = useState(''); + + useEffect(() => { + const fetchData = async () => { + try { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + const result = await response.json(); + setData(result); + setError(null); + } catch (err) { + setError('Failed to fetch data: ' + err.message); + } + }; + + fetchData(); + const pollingInterval = setInterval(fetchData, interval); + + return () => clearInterval(pollingInterval); + }, [url, interval]); + + return { data, error }; +}; + +export default usePolling;
\ No newline at end of file |
