XiNiHa
01/18/2022, 7:44 AMWarning: usePreloadedQuery(): Expected preloadedQuery to not be disposed yet.
에러가 발생하는데요, 이거저거 시도해보는데 뭐가 문제인지 제대로 파악을 못 하겠습니다. 혹시 정확한 원인이 뭐고, 어떤 것부터 해결을 시도해보면 될까요?Hyeseong Kim
01/18/2022, 8:23 AMHyeseong Kim
01/18/2022, 8:23 AMXiNiHa
01/18/2022, 8:43 AMXiNiHa
01/18/2022, 8:56 AM{ '/': indexQuery }
식으로 각 라우트별 쿼리가 들어 있는 맵이 모듈로 존재합니다.
• 먼저 서버에서 이걸 가지고 loadQuery
해서 initialQueryRef
을 얻습니다.
• PageShell(최상단 컴포넌트)에서 Provider들을 씌운 후, 바로 안 컴포넌트에서 useQueryLoader
를 사용해 위에서 설명한 맵을 가지고 { '/': { queryRef, load(), dispose() } }
식의 맵을 만듭니다. 활성화된 라우트의 경우 위에서 만든 initialQueryRef
도 사용합니다.
• 현재 활성화된 라우트의 컴포넌트에 해당 라우트의 정보를 가지고 queryRef
을 넘깁니다.
• 이후 Suspense 따라 SSR이 진행되고, 최소 대기 딜레이 내에 데이터 페칭이 완료되어 전체가 렌더링된 페이지가 클라이언트로 전송됩니다.
• 클라이언트 초기화 코드 실행이 시작됩니다. 서버에서 했듯이 활성 라우트 쿼리의 initialQueryRef
를 불러옵니다.
• 이후 서버에서처럼 PageShell을 사용해서 VDOM 노드를 만들고, Hydrate합니다.
• 로그로 찍어보면 최초 렌더 시에는 queryRef.isDisposed
가 false로 나오고, 즉시 PreloadedQuery.releaseQuery()
가 호출되며 true로 바뀌고 에러가 납니다.
코드 보고 싶으신 부분 알려주시면 이따가 시간 될 때 코드 올리도록 하겠습니다...XiNiHa
01/18/2022, 9:58 AM클라이언트와 서버 각각에서 initialQueryRef를 먹여서일단 테스트해 보니 이 경우는 아니네요… initialQueryRef이 없으면 에러가 나는군요