작성
·
65
0
react-query 사용 시
enabled 옵션이 true인 경우
queryFn을 실행하지는 않지만
queryKey는 생성되는데 queryKey가 안 생기게 하자니 Hook을 조건부로 작성할 수 없어서 이런 방법은 불가능하고 queryFn은 실행하지 않으니 괜찮다는 생각도 드는데
예를 들면 ["post", id]가 있고 id가 null인 경우
queryKey는 ["post", null]로 무조건 생성이 되더군요. Observe도 많은 곳에서 쓸 수록 2 or 3 이런 식으로 증가하고요. 이게 성능에 문제가 없을지 아니면 queryKey 생성까지 막을 수 있는 방법이 있는지 궁금합니다.
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
ysk님께서 질문하신 사항은 React Query의 enabled
옵션과 queryKey 생성 관련된 내용이네요. 우선, React Query의 enabled
옵션 사용과 queryKey 생성 과정에 대한 간단한 설명을 제공드립니다.
enabled
옵션enabled: false
로 설정하면 queryFn
은 자동으로 실행되지 않아서 데이터 페칭을 막을 수 있습니다. 그러나 하나의 특성상, queryKey는 여전히 생성됩니다. 이는 React Query의 내부 설계에 따른 동작으로, queryFn
과 관계없이 queryKey는 캐싱 시스템의 식별용으로 생성됩니다.queryKey
자체는 서버로의 요청과 직접적인 연관이 없기에, 단순히 생성되는 것만으로 성능에 큰 문제를 주지는 않습니다. 다만, queryKey
의 구성 요소로 null
이 포함되는 경우, 예상치 않은 데이터를 참조할 가능성 등을 염두에 두어야 합니다.useQuery
를 사용하는 방식을 채택하세요. 예를 들어, id
가 존재할 때만 useQuery
를 사용하는 방법입니다.queryFn
의 효율적 구성: queryFn
내부를 최대한 경량화하고, 불필요한 작업을 최소화하여 만일의 경우에도 효율성을 지킬 수 있도록 합니다.queryKey
설계: 가능한 경우 null
같은 비의미적 게시 요소를 queryKey
에 포함하지 않도록 관리합니다.useQuery
사용 시 조건부 처리에 대한 블로그 포스트가 있습니다. 이 포스트는 React Query의 핵심 개념을 깊이 있게 다루고 있습니다.저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
useQuery({ queryKey: ["wish", id], queryFn: () => getWish(userId!), enabled: !!id, staleTime: 1000 * 60 * 10, });
이런 식으로 했을 때 id가 없을 경우 queryFn은 실행되지 않지만
query devtools에서는 ["wish", null]로 생겨서 문의드렸습니다. 해당 키에 disabled 표시와 data: null인 것을 확인 했지만 키가 캐싱(?)되긴 하는 것 같아서요