useAsyncTasks
Introduce
비동기 작업 리스트와 옵션을 받아 로딩 상태, 데이터, 오류 등을 관리하며, 컴포넌트 언마운트 시 상태 업데이트를 방지합니다.
interface UseAsyncTasksProps<R> {
tasks: Task<R>[];
options?: Options<R>;
}
interface UseAsyncTasksReturns<R> {
isLoading: boolean;
data: R | null;
error: Error | null;
isError: boolean;
reset: () => void;
}
const useAsyncTasks = <R>(tasks: Task<R>[], options: Options<R>): UseAsyncTasksReturns<R> => { ... }
Props
tasks
: 실행할 비동기 작업들의 배열입니다. 비동기 함수 외에도 일반 함수, 원시 데이터 등을 전달할 수 있습니다.
Returns
isLoading
: 현재 비동기 작업이 진행 중인지 여부를 나타내는 불리언 값입니다.data
: 성공적으로 완료된 작업의 결과를 담고 있는 데이터입니다.error
: 작업 중 발생한 오류 정보를 포함합니다.isError
: 오류가 발생했는지 여부를 나타내는 불리언 값입니다.reset
: 이전 상태를 초기화하여 초기 상태로 되돌리는 함수입니다.
Examples
TestComponent.tsx
const fetchUsers = async () => {
const response = await fetch(`https://jsonplaceholder.typicode.com/users`);
if (!response.ok) throw new Error('사용자 목록을 가져오지 못했습니다.');
return response.json();
};
const TestComponent = () => {
const { isLoading, data, error, isError, reset } = useAsyncTasks<
{ id: string; name: string }[]
>([fetchUsers], {
onSuccess: () => console.log('사용자 목록을 성공적으로 가져왔습니다!'),
onError: (err) => console.error('오류:', err),
});
return (
<div>
<button onClick={reset}>재로드</button>
{isLoading && <p>로딩 중...</p>}
{isError && <p>오류: {error?.message}</p>}
{data && (
<ul>
{data.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
)}
</div>
);
};