Relay를 사용해보고 있습니다. 컴포넌트 내에 `useState`로 상태를 두고, `va...
# 질문
u
Relay를 사용해보고 있습니다. 컴포넌트 내에 `useState`로 상태를 두고,
variables
로 전달하여 상태값이 변경될 때 마다 새롭게 요청을 시도하는 의도로 코드를 작성했는데, 같은 요청을 두 번씩 호출하는 문제가 발생하는데 혹시 의심이 가는 부분이 있을까요?
Relay DevTools에서는 사진과 같이 표시됩니다.
구체적인 컨텍스트를 공유드리자면, 현재 시간을 기준으로 데이터를 필터링하는 로직을 구현하고자 합니다. 그래서 window에 focus 이벤트가 발생할 때 마다,
new Date()
로 새로운 상태를 지정합니다.
message has been deleted
QueryRenderer에 입력한 props는 다음과 같습니다.
네트워크 탭을 확인했을 때, 중복된 요청이 발생하는 것을 확인할 수 있었습니다.
제가 예상한 동작은
nowDate
상태가 변경될 때, 한 번만 요청을 보낼 것으로 예상했는데, 두 번씩 호출되는 것이 relay 내에서 의도된 동작인지 궁금합니다… 지혁님의 ts korea 발표를 보고 너무 궁금해서 써보고 있는 gql린이입니다 😅
t
허거걱… 흠 ㅠㅠ 왜 그러는걸까요 ㅠ
저도 지금 의도하신 코드에서 Relay에서는 한번 요청나가야되는걸로 보여요. React 쪽은 문제가 없나요?
u
아래 코드를 넣고 확인 해 보면, 의도한 대로 포커스 되는 시점의 Date로 단 한번만 변경되는 것을 확인할 수 있었습니다. 흠…
😱 1
t
클라이언트 스키마이신거죠??
u
넵 맞습니다
t
앗 혹시 오픈소스로 올려져있는 프로젝트인가요?
u
넵 오픈소스인데… pnpm 을 써보고 싶어서 적용한거라 😅
t
혹시 리졸버단에서 console 찍으면 두번 찍히나요??
u
최초 요청시에는 1번만 찍히고, 그 이후 상태가 변경될 경우 리졸버에서도 두번 찍히네요
😱 1
t
저도 한번 해볼게요 ㅎㅎ
🙇‍♂️ 1
u
혹시나 해서 빌드 후에 serve로 띄워봤는데 정상적으로 한 번만 호출하네요 😇
아무래도 리액트쪽 문제라고 추정하고 있습니다. 일단은 무시하고 계속 사용해도 될 것 같긴 한데 영… 찜찜하네욥. 현재 사용중인 버전은 16.13.1입니다.
t
@이찬희 저도 비슷한 니즈가 있어서 해봤는데요.
저는 relay-hooks로 넘어가서 ㅋㅋ 요거 기준으로 설명드릴께요
해당하는 기능을 구현하는건 RefetchContainer가 맞는거 같더라구요. QueryRenderer에 variables를 수정하게되면, 기존 캐시가 다 날아가게되는데, 이런걸 봤을때 relay에서 QueryRenderer에 들어가는 variables를 상태로써 수정가능하도록 의도한게 아닌거같아요.
💡 1
QueryRenderer는 페이지 prop을 받아서 (query param) 루트 쿼리 역할만 해주는 껍데기 느낌으로 가져가고, variable을 지속적으로 바꿔서 계속 Query 날려야하는 친구는 RefetchContainer로 가져가는게 맞는거같아요.
저는 그래서
useEffect(() => {}, [state])
로 만들고, 요 안에서
refetch
함수를 부르는식으로 짰습니다 ㅎㅎ
u
그렇군요! 감사합니다!! 😄
t
저도 배우면서 쓰고있어요 ㅋㅋ 발표 드리븐 개발