[Fix/admin/#52] Tanstack Query Invalidate 문제 수정 #53
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
📌 Related Issue Number
Checklist
✅ Key Changes
문제상황
tanstack query의 refetchOnWindowFocus 때문에 다른 창에 갔당오면 데이터를 refetch 하면서 저장하지 않는 입력값들이 초기화 돼버리는 문제가 생김
해결방법
이렇게 한 이유는 다음과 같음.
이렇게 해서 모든 쿼리를 조건없이 캐싱 해버림
이유는, 관리자 페이지에서는 주기적으로 갱신돼야 하는 데이터가 없음.
문제-> 문제가 모인세트-> 세트가 날짜에 연결된발행데이터들만 있는데, 이는 관리자페이지에서 어떤 수정이 일어나지 않는한 변경되지 않음.그래서 모든 데이터를 Infinity로 캐싱하고, 수정이 일어날때 적절하게 invalidate시켜주는 방법을 선택했음
대신, 업데이트 되어야하는 모든 쿼리를 적절하게 invalidate 시켜주지 않으면 최신 데이터가 제대로 보이지 않을 수있음.
데이터 Invalidate 시키기
업데이트가 크게
문제,세트,발행세군데에서 일어남.문제-> 문제가 모인세트-> 세트가 날짜에 연결된발행구조이기 때문에 사실 문제가 수정되면 모든 데이터가 바뀐다고 할 수 있음그래서 문제의 업데이트에 대해서는 그냥 모든 쿼리를 invalidate 시켜버림
(조금 비효율적일 수는 있지만, 뭘 빠뜨리는것보다는 낫다고 판단함,,,)
세트의 업데이트에 대한 invalidate
발행 업데이트에 대한 invalidate
useInvalidate 훅 생성
반복되는 invalidate 를 커스텀 훅으로 빼줬음.
필요한 query를 정확하게 Invalidate 시키기 위함도 있고,
openapi-react-query를 쓰다보니 invalidate 코드가 너무길어서 반복을 줄이기 위함도 있음
모든 쿼리 invalidate
문항 세트 관련 쿼리 invalidate
문항 발행 관련 쿼리 invalidate
💡 New Insights & Learnings
원래 문제 세트 invalidate할때 이런식으로 여러개의 쿼리를 invalidate시키려고 했는데, 제대로안됨
알아보니, 저렇게 여러개의 쿼리를 넣으면 or 조건으로 처리되는게 아니라,
라고함.
그래서 각각에 대해 invalidate를 시키려면
Promise.all을 이용해서 모두를 invalidate시켜야함
따라서
요런 코드가 됐음.
잘 동작함 👍