생각/react

react-query useQueryErrorResetBoundary 사용 예제

kyunghoonk00k 2023. 6. 13. 17:17
반응형
import { QueryClient, QueryClientProvider, useQuery, useQueryErrorResetBoundary } from 'react-query';
import { ErrorBoundary } from 'react-error-boundary';

const queryClient = new QueryClient();

function FetchData() {
  const { status, data, error } = useQuery('fetchData', async () => {
    // 임의의 API 요청
    const response = await fetch('https://yourapi.com/data');
    if (!response.ok) {
      throw new Error('Data fetch failed');
    }
    return response.json();
  });

  if (status === 'loading') {
    return <div>Loading...</div>;
  }

  if (status === 'error') {
    throw error;
  }

  return (
    <div>
      {data.map((item) => (
        <div key={item.id}>{item.title}</div>
      ))}
    </div>
  );
}

function ErrorFallback({ error, resetErrorBoundary }) {
  return (
    <>
      <div>Fetching data failed: {error.message}</div>
      <button onClick={resetErrorBoundary}>Retry</button>
    </>
  );
}

export default function App() {
  const errorResetBoundary = useQueryErrorResetBoundary();

  return (
    <QueryClientProvider client={queryClient}>
      <ErrorBoundary FallbackComponent={ErrorFallback} onReset={errorResetBoundary.reset}>
        <div className="App">
          <FetchData />
        </div>
      </ErrorBoundary>
    </QueryClientProvider>
  );
}

useQueryErrorResetBoundary를 사용하여 ErrorBoundary와 함께 resetErrorBoundary 함수를 전달합니다. 이를 통해 전체 리액트 컴포넌트의 에러 경계를 설정하고, 에러 발생 시 사용자에게 메시지와 "Retry" 버튼을 보여줍니다. 사용자가 "Retry" 버튼을 클릭하면 에러 경계를 초기화하고 컴포넌트를 다시 마운트하여 API 요청을 재시도합니다.

반응형

'생각 > react' 카테고리의 다른 글

react + next.js + ts  (0) 2023.06.20
React와 typescript와 next.js SSR  (0) 2023.06.16
socket io 실시간 알림  (0) 2023.06.12
react-query 기능 모음  (0) 2023.06.08
바닐라 js vs react (JSX, Babel) && react hooks  (0) 2022.12.15