https://facebook.com/groups/graphql-kr logo
#질문
Title
# 질문
y

yunseop kim

03/20/2020, 10:01 AM
안녕하세요, 또 질문드립니다. 위에 질문한거에 이어지는 질문인데요, 리스트에 항목이 추가 / 삭제 되는 경우에는 보통 어떻게 처리를 하나요? 리스트가 pagination을 하다보니까 mutation에 baseMutationOption을 줄 때 update() 내에서 캐시를 추가하기에는 좀 애매하다는 느낌이 들어서요. 그래서 onCompleted 할 때 리스트 쿼리를 refetch하려고 하는데 보통 이렇게 하는게 맞나요?
t

Tony Won

03/20/2020, 10:02 AM
넵 ㅋㅋ 저는 refetch 하는거같아요
👍 1
y

yunseop kim

03/20/2020, 10:06 AM
ㅋㅋ 지혁님 감사합니다! 엄청빠른 응답속도에 감동했습니다
👍 1
t

Tony Won

03/20/2020, 10:07 AM
앞으로도 질문 많이 부탁드려요~~ ㅋㅋ
h

Hyeseong Kim

03/20/2020, 12:21 PM
refetch 하는게 빠르긴 한데 몇가지 문제가 있죠. • 쿼리가 의존하는 variables "맥락" 을 공유해야함 • 불필요한 fetch • 캐시 구조 변경은 피할 수 없음 가령 page: 1, page: 2 요청에 대한 캐시가 이미 있고 아이템이 추가되서 page: 1 의 쿼리를 refetch 한다고 하면 1페이지의 마지막 요소가 뷰에서 사라지게 됩니다. 제일 쉬운 방법은 페이지네이션 컨테이너 캐시 정책을 cache-and-network 로 매번 동기화 하는거일테지만 사실 페이지네이션 코드가 일관적이라면 커스텀 updater 를 만들어 사용해도 쉽게 코드 공유가 가능합니다. (릴레이의 PaginationContainer 처럼) 그리고 이렇게 하려면 캐시 키가 페이지 넘버 대신 아이템을 참조하는 커서기반 페이지네이션으로 바꿔야되고요.
👍 1
자주 동기화가 필요한 앱이라면 어쨋든 refetch 해야 할 수 있지만... 저는 가능하면 refetch는 줄이기 위해 설계부분 부터 고민은 해볼 가치가 있는 것 같습니다.
이런 부분은 백엔드에서 일방적으로 스키마가 정해져선 절대로 달성할 수 없기때문에
저는 백엔드에서 제공된 스키마를 확장해서 커스텀 스키마를 사용하게 되는 경우도 많은 것 같아요
👍 1