React Query는 React 애플리케이션에서 데이터 가져오기, 캐싱 및 동기화를 처리하기 위한 강력한 도구입니다. 이 기사에서는 React Query의 useIsFetching, useIsMutating 및 useIsRestoring 함수를 사용하여 서비스 호출이 보류 중인지 확인하여 전역 로딩 상태를 관리하고 표시기를 표시하는 사용자 정의 후크를 생성합니다. 그런 다음 후크가 예상대로 작동하는지 확인하기 위해 Jest를 사용하여 단위 테스트를 작성하겠습니다.
시작하기 전에 다음이 설치되어 있는지 확인하세요.
이 기능이 설치되어 있지 않은 경우 npm을 통해 추가할 수 있습니다.
npm install @tanstack/react-query @testing-library/react-hooks jest
먼저 보류 중인 서비스 호출이 있는지 확인하는 useServiceConfig라는 사용자 정의 후크를 만들어 보겠습니다.
import { useIsFetching, useIsMutating, useIsRestoring } from '@tanstack/react-query'; import { useMemo } from 'react'; const modes = { fetching: 'fetching', mutating: 'mutating', restoring: 'restoring', all: 'all', } as const; type TMode = keyof typeof modes; /** * @name useServiceConfig * @description A custom hook that returns a boolean value indicating if any service call is pending. * @param {TMode} mode The mode to check for pending service calls. Default is `'all'`. * @returns {readonly [boolean]} A tuple containing a single boolean value indicating if any service call is pending. */ const useServiceConfig = (mode: TMode = modes.all): readonly [boolean] => { const isFetching = useIsFetching(); const isMutating = useIsMutating(); const isRestoring = useIsRestoring(); const isPending = useMemo(() => { switch (mode) { case modes.fetching: return isFetching > 0; case modes.mutating: return isMutating > 0; case modes.restoring: return isRestoring; case modes.all: default: return isFetching > 0 || isMutating > 0 || isRestoring; } }, [mode, isFetching, isMutating, isRestoring]); return [isPending] as const; }; export default useServiceConfig;
useMemo를 사용하여 이러한 값을 결합하여 보류 상태를 나타내는 값이 있는지 확인합니다. 그런 다음 후크는 이 부울 값을 포함하는 튜플을 반환합니다.
우리는 이 기능을 사용하여 보류 중인 서비스 요청이 있는지 확인합니다. 이러한 함수 중 하나라도 0보다 큰 값을 반환하면 isPending을 true로 설정합니다.
이제 후크가 생겼으니 Jest를 사용하여 단위 테스트를 작성하여 예상대로 작동하는지 확인하겠습니다.
useServiceConfig.test.ts(또는 TypeScript를 사용하지 않는 경우 .js)라는 파일을 만듭니다. React Testing Library의 renderHook 유틸리티를 사용하여 테스트 환경에서 후크를 렌더링하겠습니다.
npm install @tanstack/react-query @testing-library/react-hooks jest
테스트 실행:
Jest를 사용하여 테스트를 실행하세요.
import { useIsFetching, useIsMutating, useIsRestoring } from '@tanstack/react-query'; import { useMemo } from 'react'; const modes = { fetching: 'fetching', mutating: 'mutating', restoring: 'restoring', all: 'all', } as const; type TMode = keyof typeof modes; /** * @name useServiceConfig * @description A custom hook that returns a boolean value indicating if any service call is pending. * @param {TMode} mode The mode to check for pending service calls. Default is `'all'`. * @returns {readonly [boolean]} A tuple containing a single boolean value indicating if any service call is pending. */ const useServiceConfig = (mode: TMode = modes.all): readonly [boolean] => { const isFetching = useIsFetching(); const isMutating = useIsMutating(); const isRestoring = useIsRestoring(); const isPending = useMemo(() => { switch (mode) { case modes.fetching: return isFetching > 0; case modes.mutating: return isMutating > 0; case modes.restoring: return isRestoring; case modes.all: default: return isFetching > 0 || isMutating > 0 || isRestoring; } }, [mode, isFetching, isMutating, isRestoring]); return [isPending] as const; }; export default useServiceConfig;
모든 테스트가 통과되었음을 나타내는 출력이 표시됩니다.
이 기사에서는 다양한 모드(가져오기, 변경, 복원 또는 모두)를 기반으로 서비스 호출 상태를 확인하는 사용자 정의 React 쿼리 후크를 구축했습니다. 그런 다음 Jest를 사용하여 테스트를 작성하고 실행하여 후크가 다양한 시나리오에서 올바르게 작동하는지 확인했습니다. 이 접근 방식은 전역 로딩 상태를 관리하는 데 도움이 되며 애플리케이션에 표시기를 더 쉽게 표시할 수 있습니다.
이러한 단계를 따르면 다양한 사용 사례에 대해 유사한 후크를 만들고 자신있게 테스트할 수 있습니다.
즐거운 코딩하세요!
위 내용은 전역 로딩 표시기에 대한 React 쿼리 후크를 만들고 테스트하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!