interface StatusType {
isLoading: boolean;
isError: boolean;
}
type ErrorType<T> = {
error: T | unknown;
};
export const manageStatus = (
{ isLoading, isError }: StatusType,
{ error }: ErrorType<object>
) => {
if (isLoading) {
return <h2>Loading...</h2>;
} else if (isError) {
return <h2>{Object(error).message}</h2>;
}
};
위의 isLoading, isError, error는 useQuery에서 꺼낸 것들
(isLoading + isError = status)
import { useParams } from 'react-router-dom';
import { useQuery } from '@tanstack/react-query';
import { getTodoById } from 'api';
import { manageStatus } from 'shared/util';
export const Todo = () => {
const { todoId } = useParams();
const { status, data, error } = useQuery({
queryKey: ['data', String(todoId)],
queryFn: () => getTodoById(String(todoId)),
});
const { content, createdAt, updatedAt } = data;
manageStatus({ status, error });
return (
<>
<h2>Todo</h2>
<p>{content}</p>
<p>{createdAt}</p>
<p>{updatedAt}</p>
</>
);
};