RTK Query는 다른 데이터 패칭 라이브러리들에서 많은 영향을 받았습니다. Redux core 라이브러리가 Flux나 Elm같은 라이브러리들에서 영향을 받았던것처럼, RTK Query는 React Query, SWR, Apollo, Urql같은 라이브러리에서 많이 사용되는 API 설계 패턴과 개념을 기반으로 합니다. RTK Query는 기초부터 만들어졌지만, 리덕스의 강점과 능력에 맞게 다른 라이브러리의 우수한 개념들을 사용하고자 노력했습니다.
저희는 위의 라이브러리들이 모두 우수하다고 생각합니다. 만약 그중 하나를 사용중이다면, 개발자가 겪는 여러 문제들을 해결할 수 있게 도와준다고 생각합니다. 이 페이지 정보들의 목적은 기능, 구현, 접근, API 디자인들에서 어떤 차이점이 있는지 알려주는 것 입니다. 이 페이지의 목표는 X가 Y보다 좋다고 주장하기 보다는 정보에 입각해서 결정을 돕고 장단점들을 이해하는 것 입니다.
보통 RTK Query를 사용하는 이유들로는:
RTK Query는 고려할 가치가 있는 몇몇의 특별한 API 디자인 측면들과 기능들을 가지고 있습니다.
util.updateQueryData
를 통해)을 손쉽게 할 수 있습니다. fetchBaseQuery
를 제공합니다. 또한 axios
, redaxios
같은 다른 클라이언트와 바꾸기도 매우 쉽습니다. RTK Query는 여러 요청에서 동일한 항목에 대한 캐시 중복제거를 의도적으로 구현하지 않았습니다. 그 이유로는 여러가지가 있는데:
RTK Query는 고정된 번들 사이즈를 앱에 추가합니다. RTK Query가 Redux Toolkit과 React-Redux 위에서 동작하기 때문에 추가된 크기는 얼마나 그것들을 사용하고 있는지에 따라서 달라집니다. 예상되는 min+gzip 번들 사이즈는:
엔드포인트 정의를 추가하면 오직 endpoint
내의 코드의 크기를 추가하며, 일반적으로 몇 바이트에 불과합니다.
RTK Query의 번들 사이즈는 직접 작성한 데이터 패칭 로직을 제거하면 대부분의 애플리케이션의 사이즈가 의미있게 개선됩니다.
다른 라이브러리들을 비교해서 기능의 공통점과 차이점을 파악할 수 있습니다.
💡 정보
이 비교 테이블은 최대한 정확하고 편견이 없도록 노력했습니다. 이러한 라이브러리를 사용하고 정보가 개선되야한다고 생각하는 경우, 언제든지 이슈를 열어 변경을 제안하세요
Feature | rtk-query | react-query | apollo | urql |
---|---|---|---|---|
Supported Protocols | any, REST included | any, none included | GraphQL | GraphQL |
API Definition | declarative | on use, declarative | GraphQL schema | GraphQL schema |
Cache by | endpoint + serialized arguments | user-defined query-key | type/id | type/id? |
Invalidation Strategy + Refetching | declarative, by type and/or type/id | manual by cache key | automatic cache updates on per-entity level, manual query invalidation by cache key | declarative, by type OR automatic cache updates on per-entity level, manual query invalidation by cache key |
Polling | yes | yes | yes | yes |
Parallel queries | yes | yes | yes | yes |
Dependent queries | yes | yes | yes | yes |
Skip queries | yes | yes | yes | yes |
Lagged queries | yes | yes | no | ? |
Auto garbage collection | yes | yes | no | ? |
Normalized caching | no | no | yes | yes |
Infinite scrolling | TODO | yes | requires manual code | ? |
Prefetching | yes | yes | yes | yes? |
Retrying | yes | yes | requires manual code | ? |
Optimistic updates | can update cache by hand | can update cache by hand | optimisticResponse | ? |
Manual cache manipulation | yes | yes | yes | yes |
Platforms | hooks for React, everywhere Redux works | hooks for React | various | various |