아폴로에서 상태 업데이트 할 때마다 다른 변수로 쿼리하려고 `useQuery` 랑 `ref...
# 질문
u
아폴로에서 상태 업데이트 할 때마다 다른 변수로 쿼리하려고
useQuery
refetch
사용하는데 다른 best practice 가 있을까요?
h
"상태"랑 "다른 변수" 가 각각 무엇인가요
그리고 정확히 다루고 계신 문제가 무엇인가요
"다른 변수" == options.variables ?
그냥 hook에 variables 값만 변경해줘도 알아서 refetch가 됩니다
👍 1
refetch 를 imperative 하게 호출하지 않으셔도 돼요
u
상태는 특정 달(month)이 바뀌는 거고 이 상태값이 쿼리의 변수로 들어갑니당
오 그런가요? 뭔가 안됐던것 같아서 여쭤본건데
다시 해보고 올게여
h
네트워크 요청 날아가는지 확인해보세요
variable 잘 바뀌어 넘어갔고 실제 네트워크 요청도 다시 가서 응답 잘 왔는데 뷰에 원하는대로 반영 안되는거면 캐시 디버깅을 하셔야합니다. 스키마를 잘못만들었을 가능성이 높아요
👍 1
u
넵 확인해보겠습니다 감사합니다
이건 다른 질문인데여 아폴로에서 보통 캐시 정규화 할 때
id
__typename
을 사용하는데 쿼리 응답값에
id
가 없으면 커스터마이징하는게 베스트 프렉티스 일까요?
h
제가 (@undefined 님 상황에 맞는) 베스트프랙티스는 모르고요.
말씀하신건 따지자면 클라이언트에서 새로 모델을 만든다는건데
흠 글쎄요 전 그렇게 많이 쓰긴 했는데
상황마다 다를거같아요
u
음 그렇군여 그러면 커스터마이징 해도 괜찮을 것 같네여 감사합니다
근데 저희 회사분이 이 슬랙 들어오고 싶으시다는데 초대해야 들어올 수 있나여?
🙏 1
h
🙇‍♀️ 1
🙇‍♂️ 1
u
제가 알기에도 혜성님께서 말씀해주신대로 hook에서는 options.variables만 변경해줘도 변경된 variables로 리페치되는걸로 알고있고 잘 쓰고있습니당. https://graphql-korea.slack.com/archives/CN13FD736/p1614157383010600?thread_ts=1614155155.008200&cid=CN13FD736 해당 질문에서 답은 제가 경험하기엔 서버 스키마에 id가 포함되어있는게 가장 편한 방법이라고 생각하구용. 서버 스키마에 id가 포함되는게 불가능하다면 InMemoryCache > typePolicies > keyFields로 설정하시는게 아폴로에서 권장하는 방법으로 알고있습니다. (3.0 버전 이상 기준) 그런데 이 방법은 모든 필드에 대해서 일일히 해줘야해서... 사실상 불가능하지 않을까 싶은데 제가 방법을 모르는 것일수도 있습니당. 2.x 버전대 기준으로는 dataIdFromObject로 변경하는 것으로 알고 있습니다. 해당 내용에 대한 문서는 https://www.apollographql.com/docs/react/caching/cache-configuration/#configuration-options 입니당 🙂
👍 2
u
감사합니당