UseAbortControllerDemo
guarahooks/use-abort-controller-demoFreeExample
use-abort-controller's hook in action.
Install it
npx shadcn@latest add https://guarahooks.com/r/use-abort-controller-demo.jsonSource
1'use client';23import React, { useState } from 'react';45import { DownloadIcon, Loader2Icon, RefreshCwIcon, XIcon } from 'lucide-react';67import { Badge } from '@/components/ui/badge';8import { Button } from '@/components/ui/button';9import {10 Card,11 CardContent,12 CardDescription,13 CardHeader,14 CardTitle,15} from '@/components/ui/card';1617import { useAbortController } from '@/hooks/guarahooks/use-abort-controller';1819interface Post {20 userId: number;21 id: number;22 title: string;23 body: string;24}2526interface HttpBinResponse {27 args: Record<string, string>;28 data: string;29 files: Record<string, string>;30 form: Record<string, string>;31 headers: Record<string, string>;32 json: Record<string, string | number | boolean | null> | null;33 origin: string;34 url: string;35}3637export default function UseAbortControllerDemo() {38 const [fetchStatus, setFetchStatus] = useState<39 'idle' | 'loading' | 'success' | 'error' | 'aborted'40 >('idle');41 const [data, setData] = useState<Post | HttpBinResponse | null>(null);42 const [error, setError] = useState<string | null>(null);4344 const {45 signal,46 abort,47 reset,48 fetch: abortableFetch,49 aborted,50 } = useAbortController();5152 const handleFetch = async () => {53 setFetchStatus('loading');54 setError(null);55 setData(null);5657 try {58 // Simulate a slow API call59 const response = await abortableFetch(60 'https://jsonplaceholder.typicode.com/posts/1',61 );6263 if (!response.ok) {64 throw new Error(`HTTP error! status: ${response.status}`);65 }6667 const result: Post = await response.json();68 setData(result);69 setFetchStatus('success');70 } catch (err: unknown) {71 if (err instanceof Error && err.name === 'AbortError') {72 setFetchStatus('aborted');73 setError('Request was aborted');74 } else {75 setFetchStatus('error');76 setError(err instanceof Error ? err.message : 'An error occurred');77 }78 }79 };8081 const handleLongFetch = async () => {82 setFetchStatus('loading');83 setError(null);84 setData(null);8586 try {87 // Simulate a very slow API call using httpbin delay88 const response = await abortableFetch('https://httpbin.org/delay/5');8990 if (!response.ok) {91 throw new Error(`HTTP error! status: ${response.status}`);92 }9394 const result: HttpBinResponse = await response.json();95 setData(result);96 setFetchStatus('success');97 } catch (err: unknown) {98// … truncated
What it pulls in
Other registry items
Files it writes
More from guarahooks
All 100 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| UseArrayStateDemouse-array-state-demo | guarahooks | Examples | Free | no deps | |
| UseAxiosDemouse-axios-demo | guarahooks | Examples | Free | no deps | |
| UseBatteryStatusDemouse-battery-status-demo | guarahooks | Examples | Free | no deps | |
| UseBetterAuthDemouse-better-auth-demo | guarahooks | Examples | Free | no deps | |
| UseClickOutsideDemouse-click-outside-demo | guarahooks | Examples | Free | no deps | |
| UseConfirmDemouse-confirm-demo | guarahooks | Examples | Free | no deps | |
| UseCookieDemouse-cookie-demo | guarahooks | Examples | Free | no deps | |
| UseCopyToClipboardDemouse-copy-to-clipboard-demo | guarahooks | Examples | Free | no deps |
