Careeroza
Real World Example
Real World: Shared hooks in a job portal
The same logic is needed on many pages: load data, remember saved jobs, know if the user is offline. Each becomes a custom hook used everywhere.
function useOnlineStatus() {
const [online, setOnline] = useState(navigator.onLine);
useEffect(() => {
const on = () => setOnline(true);
const off = () => setOnline(false);
window.addEventListener('online', on);
window.addEventListener('offline', off);
return () => { window.removeEventListener('online', on); window.removeEventListener('offline', off); };
}, []);
return online;
}
function JobsPage() {
const online = useOnlineStatus();
const { data: jobs, loading } = useFetch('/api/jobs');
const [saved, setSaved] = useLocalStorage('savedJobs', []);
if (!online) return <p>You are offline. Showing {saved.length} saved jobs.</p>;
return loading ? <Spinner /> : <JobList jobs={jobs} saved={saved} onSave={setSaved} />;
}