클래식 React 클라이언트에서 마이그레이션
마이그레이션을 위한 몇 가지 접근 방식이 있으며, 이 라이브러리는 클래식 클라이언트와 상당한 차이가 있으므로 한 번에 완료하는 것을 기대하지 않습니다. 그러나 아마도 다음 조합을 시도해 보실 것입니다...
Codemod 마이그레이션
Codemod는 아직 개발 중이며 개선에 도움이 필요합니다. 기여하려면 Julius의 댓글을 확인해 주세요.
기존 코드베이스를 새 클라이언트로 이전하는 Codemod를 개발하고 있습니다. 지금도 사용해 볼 수 있지만 개선을 위한 피드백과 기여가 필요합니다. Codemod는 정확하게 구현하기가 까다로운 만큼 더 효과적으로 만들 수 있도록 도움을 기다리고 있습니다.
업그레이드 CLI를 실행합니다:
shnpx @trpc/upgrade
shnpx @trpc/upgrade
프롬프트가 표시되면 Migrate Hooks to xxxOptions API 및 Migrate context provider setup 변환을 선택합니다.
점진적 마이그레이션
새로운 클라이언트와 클래식 클라이언트는 서로 호환되며 같은 애플리케이션에서 함께 사용할 수 있습니다. 이는 애플리케이션의 새로운 부분에서 새로운 클라이언트를 사용하여 마이그레이션을 시작하고, 필요에 따라 기존 사용처를 점진적으로 마이그레이션할 수 있음을 의미합니다. 가장 중요한 점은, Query Keys가 동일하므로 새로운 클라이언트와 클래식 클라이언트를 함께 사용하더라도 TanStack Query의 캐시에 계속 의존할 수 있다는 것입니다.
쿼리 마이그레이션
클래식 쿼리는 다음과 같은 형태입니다
tsximport {trpc } from './trpc';functionUsers () {constgreetingQuery =trpc .greeting .useQuery ({name : 'Jerry' });// greetingQuery.data === 'Hello Jerry'}
tsximport {trpc } from './trpc';functionUsers () {constgreetingQuery =trpc .greeting .useQuery ({name : 'Jerry' });// greetingQuery.data === 'Hello Jerry'}
다음과 같이 변경됩니다
tsximport {useQuery } from '@tanstack/react-query';import {useTRPC } from './trpc';functionUsers () {consttrpc =useTRPC ();constgreetingQuery =useQuery (trpc .greeting .queryOptions ({name : 'Jerry' }));// greetingQuery.data === 'Hello Jerry'}
tsximport {useQuery } from '@tanstack/react-query';import {useTRPC } from './trpc';functionUsers () {consttrpc =useTRPC ();constgreetingQuery =useQuery (trpc .greeting .queryOptions ({name : 'Jerry' }));// greetingQuery.data === 'Hello Jerry'}
무효화 및 기타 QueryClient 사용처 마이그레이션
클래식 무효화 패턴은 다음과 같은 형태입니다
tsximport {trpc } from './trpc';functionUsers () {constutils =trpc .useUtils ();async functioninvalidateGreeting () {awaitutils .greeting .invalidate ({name : 'Jerry' });}}
tsximport {trpc } from './trpc';functionUsers () {constutils =trpc .useUtils ();async functioninvalidateGreeting () {awaitutils .greeting .invalidate ({name : 'Jerry' });}}
다음과 같이 변경됩니다
tsximport {useQueryClient } from '@tanstack/react-query';import {useTRPC } from './trpc';functionUsers () {consttrpc =useTRPC ();constqueryClient =useQueryClient ();async functioninvalidateGreeting () {awaitqueryClient .invalidateQueries (trpc .greeting .queryFilter ({name : 'Jerry' }),);}}
tsximport {useQueryClient } from '@tanstack/react-query';import {useTRPC } from './trpc';functionUsers () {consttrpc =useTRPC ();constqueryClient =useQueryClient ();async functioninvalidateGreeting () {awaitqueryClient .invalidateQueries (trpc .greeting .queryFilter ({name : 'Jerry' }),);}}
이는 모든 QueryClient 사용처에 동일하게 적용되며, tRPC의 useUtils 대신 이제 TanStack 문서를 직접 따를 수 있습니다
뮤테이션 마이그레이션
클래식 뮤테이션은 다음과 같은 형태일 수 있습니다
tsximport {trpc } from './trpc';functionUsers () {constcreateUserMutation =trpc .createUser .useMutation ();createUserMutation .mutate ({name : 'Jerry' });}
tsximport {trpc } from './trpc';functionUsers () {constcreateUserMutation =trpc .createUser .useMutation ();createUserMutation .mutate ({name : 'Jerry' });}
다음과 같이 변경됩니다
tsximport {useMutation } from '@tanstack/react-query';import {useTRPC } from './trpc';functionUsers () {consttrpc =useTRPC ();constcreateUserMutation =useMutation (trpc .createUser .mutationOptions ());createUserMutation .mutate ({name : 'Jerry' });}
tsximport {useMutation } from '@tanstack/react-query';import {useTRPC } from './trpc';functionUsers () {consttrpc =useTRPC ();constcreateUserMutation =useMutation (trpc .createUser .mutationOptions ());createUserMutation .mutate ({name : 'Jerry' });}