diff --git a/src/App.tsx b/src/App.tsx
index 1b1caa3a..369a2a31 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,23 +1,26 @@
import { Global, ThemeProvider } from '@emotion/react';
import styled from '@emotion/styled';
-import { useEffect } from 'react';
+import { useEffect, useState } from 'react';
import { QueryClient, QueryClientProvider } from 'react-query';
import Router from './Router';
import gStyle from './styles/GlobalStyles';
import theme from './styles/theme';
-const queryClient = new QueryClient({
- defaultOptions: {
- queries: {
- suspense: true,
- useErrorBoundary: true,
- retry: 0,
- },
- },
-});
-
function App() {
+ const [queryClient] = useState(
+ () =>
+ new QueryClient({
+ defaultOptions: {
+ queries: {
+ suspense: true,
+ useErrorBoundary: true,
+ retry: 0,
+ },
+ },
+ }),
+ );
+
const setScreenSize = () => {
// vh 관련
const vh = window.innerHeight * 0.01;
diff --git a/src/History/components/MyLecueBook/index.tsx b/src/History/components/MyLecueBook/index.tsx
index 46e2ef0d..dfaef14f 100644
--- a/src/History/components/MyLecueBook/index.tsx
+++ b/src/History/components/MyLecueBook/index.tsx
@@ -26,7 +26,7 @@ function MyLecueBook(props: LecueBookProps) {
const deleteBookMutation = useDeleteMyBook();
const postFavoriteMutation = usePostFavorite('mypage');
- const deleteFavoriteMutation = useDeleteFavorite('myLecueBook');
+ const deleteFavoriteMutation = useDeleteFavorite('lecueBook');
const convertNoteCount = (noteNum: number) => {
setNoteCount(noteNum.toLocaleString());
diff --git a/src/History/hooks/useDeleteMyBook.ts b/src/History/hooks/useDeleteMyBook.ts
index 413bbeae..7f50986b 100644
--- a/src/History/hooks/useDeleteMyBook.ts
+++ b/src/History/hooks/useDeleteMyBook.ts
@@ -1,6 +1,7 @@
import { useMutation, useQueryClient } from 'react-query';
import { useNavigate } from 'react-router-dom';
+import { QUERY_KEY } from '../../constants/queryKeys';
import { deleteMyBook } from '../api/deleteMyBook';
const useDeleteMyBook = () => {
@@ -12,7 +13,7 @@ const useDeleteMyBook = () => {
},
onError: () => navigate('/error'),
onSuccess: () => {
- queryClient.refetchQueries(['get-my-lecueBook'], {
+ queryClient.refetchQueries(QUERY_KEY.favorite.getLecueBookFavorite, {
exact: true,
});
},
diff --git a/src/History/hooks/useGetMyBookList.ts b/src/History/hooks/useGetMyBookList.ts
index 0141d8a0..57c8877f 100644
--- a/src/History/hooks/useGetMyBookList.ts
+++ b/src/History/hooks/useGetMyBookList.ts
@@ -1,12 +1,13 @@
import { useQuery } from 'react-query';
import { useNavigate } from 'react-router-dom';
+import { QUERY_KEY } from '../../constants/queryKeys';
import { getMyBookList } from '../api/getMyBookList';
export default function useGetMyBookList() {
const navigate = useNavigate();
const { data: myBookList, isLoading } = useQuery(
- ['get-my-lecueBook'],
+ QUERY_KEY.favorite.getLecueBookFavorite,
() => getMyBookList(),
{
onError: () => {
diff --git a/src/History/hooks/useGetMyFavorite.ts b/src/History/hooks/useGetMyFavorite.ts
index 23956ee3..d4270155 100644
--- a/src/History/hooks/useGetMyFavorite.ts
+++ b/src/History/hooks/useGetMyFavorite.ts
@@ -1,12 +1,13 @@
import { useQuery } from 'react-query';
import { useNavigate } from 'react-router-dom';
+import { QUERY_KEY } from '../../constants/queryKeys';
import { getMyFavorite } from '../api/getMyFavorite';
export default function useGetMyFavorite() {
const navigate = useNavigate();
const { data: myFavoriteList, isLoading } = useQuery(
- ['get-mypage-favorite'],
+ QUERY_KEY.favorite.getMypageFavorite,
() => getMyFavorite(),
{
onError: () => {
diff --git a/src/Home/constants/homeQueryKey.ts b/src/Home/constants/homeQueryKey.ts
new file mode 100644
index 00000000..ad01508a
--- /dev/null
+++ b/src/Home/constants/homeQueryKey.ts
@@ -0,0 +1,3 @@
+export const HOME_QUERY_KEY = {
+ getLecueBook: ['get-lecue-book'],
+};
diff --git a/src/Home/hooks/useGetLecueBook.ts b/src/Home/hooks/useGetLecueBook.ts
index a43b43ea..bb6db306 100644
--- a/src/Home/hooks/useGetLecueBook.ts
+++ b/src/Home/hooks/useGetLecueBook.ts
@@ -2,12 +2,13 @@ import { useQuery } from 'react-query';
import { useNavigate } from 'react-router-dom';
import getLecueBook from '../api/getLecueBook';
+import { HOME_QUERY_KEY } from '../constants/homeQueryKey';
const useGetLecueBook = () => {
const navigate = useNavigate();
const { isLoading: isLoadingLecueBook, data: lecueBook } = useQuery({
- queryKey: ['get-lecue-book'],
+ queryKey: HOME_QUERY_KEY.getLecueBook,
queryFn: () => getLecueBook(),
onError: () => navigate('/error'),
refetchOnWindowFocus: false,
diff --git a/src/LecueNote/hooks/usePostLecueNote.ts b/src/LecueNote/hooks/usePostLecueNote.ts
index 528c7f51..cd79a5a2 100644
--- a/src/LecueNote/hooks/usePostLecueNote.ts
+++ b/src/LecueNote/hooks/usePostLecueNote.ts
@@ -30,7 +30,7 @@ const usePostLecueNote = () => {
navigate(`/lecue-book/${bookUuid}`);
},
});
- return mutation;
+ return { postMutation: mutation.mutate, isLoading: mutation.isLoading };
};
export default usePostLecueNote;
diff --git a/src/LecueNote/hooks/usePutPresignedUrl.ts b/src/LecueNote/hooks/usePutPresignedUrl.ts
index 116d6583..635cea62 100644
--- a/src/LecueNote/hooks/usePutPresignedUrl.ts
+++ b/src/LecueNote/hooks/usePutPresignedUrl.ts
@@ -16,7 +16,7 @@ const usePutPresignedUrl = () => {
},
onError: () => navigate('/error'),
});
- return mutation;
+ return { putMutation: mutation.mutate, isLoading: mutation.isLoading };
};
export default usePutPresignedUrl;
diff --git a/src/LecueNote/page/LeceuNotePage/index.tsx b/src/LecueNote/page/LeceuNotePage/index.tsx
index 77553920..3142e7a6 100644
--- a/src/LecueNote/page/LeceuNotePage/index.tsx
+++ b/src/LecueNote/page/LeceuNotePage/index.tsx
@@ -21,8 +21,11 @@ function LecueNotePage() {
const MAX_LENGTH = 1000;
const navigate = useNavigate();
const location = useLocation();
- const putMutation = usePutPresignedUrl();
- const postMutation = usePostLecueNote();
+ const { putMutation } = usePutPresignedUrl();
+ const { postMutation } = usePostLecueNote();
+ const isMutationLoading =
+ usePutPresignedUrl().isLoading || usePostLecueNote().isLoading;
+
const noteContents = sessionStorage.getItem('noteContents');
const { bookId } = location.state || {};
@@ -84,14 +87,14 @@ function LecueNotePage() {
const handleClickCompleteModal = async () => {
if (lecueNoteState.imgToBinary) {
if (lecueNoteState.imgToBinary.result && lecueNoteState.file) {
- putMutation.mutate({
+ putMutation({
presignedUrl: lecueNoteState.presignedUrl,
binaryFile: lecueNoteState.imgToBinary.result,
fileType: lecueNoteState.file.type,
});
}
}
- postMutation.mutate({
+ postMutation({
contents: lecueNoteState.contents,
color: lecueNoteState.textColor,
fileName: lecueNoteState.filename,
@@ -103,7 +106,7 @@ function LecueNotePage() {
sessionStorage.setItem('noteContents', '');
};
- return putMutation.isLoading || postMutation.isLoading ? (
+ return isMutationLoading ? (
) : (
diff --git a/src/components/common/LecueBook/index.tsx b/src/components/common/LecueBook/index.tsx
index cf70620e..ef5f2fa7 100644
--- a/src/components/common/LecueBook/index.tsx
+++ b/src/components/common/LecueBook/index.tsx
@@ -28,7 +28,7 @@ function LecueBook(props: LecueBookProps) {
const navigate = useNavigate();
- const deleteMypageMutation = useDeleteFavorite('favoriteBook');
+ const deleteMypageMutation = useDeleteFavorite('mypage');
const deleteHomeMutation = useDeleteFavorite('home');
const handleClickFavoriteBtn = (
diff --git a/src/constants/queryKeys.ts b/src/constants/queryKeys.ts
new file mode 100644
index 00000000..c299409a
--- /dev/null
+++ b/src/constants/queryKeys.ts
@@ -0,0 +1,10 @@
+export const QUERY_KEY = {
+ favorite: {
+ getHomeFavorite: ['get-home-favorite'],
+ getMypageFavorite: ['get-mypage-favorite'],
+ getLecueBookFavorite: ['get-lecueBook-favorite'],
+ },
+ nickname: {
+ getNickName: ['get-nickname'],
+ },
+};
diff --git a/src/libs/hooks/useDeleteFavorite.ts b/src/libs/hooks/useDeleteFavorite.ts
index a396922f..4f12f29d 100644
--- a/src/libs/hooks/useDeleteFavorite.ts
+++ b/src/libs/hooks/useDeleteFavorite.ts
@@ -1,6 +1,7 @@
import { useMutation, useQueryClient } from 'react-query';
import { useNavigate } from 'react-router-dom';
+import { QUERY_KEY } from '../../constants/queryKeys';
import deleteFavorite from '../api/deleteFavorite';
const useDeleteFavorite = (state: string, bookUuid?: string) => {
@@ -10,19 +11,19 @@ const useDeleteFavorite = (state: string, bookUuid?: string) => {
const handleRefetchQueries = (state: string, bookUuid?: string) => {
switch (state) {
case 'home':
- queryClient.refetchQueries(['get-favorite'], {
+ queryClient.refetchQueries(QUERY_KEY.favorite.getHomeFavorite, {
exact: true,
});
break;
- case 'favoriteBook':
- queryClient.refetchQueries(['get-mypage-favorite'], {
+ case 'mypage':
+ queryClient.refetchQueries(QUERY_KEY.favorite.getMypageFavorite, {
exact: true,
});
break;
- case 'myLecueBook':
- queryClient.refetchQueries(['get-my-lecueBook'], {
+ case 'lecueBook':
+ queryClient.refetchQueries(QUERY_KEY.favorite.getLecueBookFavorite, {
exact: true,
});
break;
@@ -41,7 +42,7 @@ const useDeleteFavorite = (state: string, bookUuid?: string) => {
},
onError: () => navigate('/error'),
onSuccess: () => {
- handleRefetchQueries(state, bookUuid);
+ handleRefetchQueries(location, bookUuid);
},
});
return mutation.mutate;
diff --git a/src/libs/hooks/useGetFavorite.ts b/src/libs/hooks/useGetFavorite.ts
index fc48f529..61ae6e39 100644
--- a/src/libs/hooks/useGetFavorite.ts
+++ b/src/libs/hooks/useGetFavorite.ts
@@ -1,13 +1,14 @@
import { useQuery } from 'react-query';
import { useNavigate } from 'react-router-dom';
+import { QUERY_KEY } from '../../constants/queryKeys';
import getFavorite from '../api/getFavorite';
const useGetFavorite = () => {
const navigate = useNavigate();
const { isLoading: isLoadingFavorite, data: favorite } = useQuery({
- queryKey: ['get-favorite'],
+ queryKey: QUERY_KEY.favorite.getHomeFavorite,
queryFn: () => getFavorite(),
onError: () => navigate('/error'),
refetchOnWindowFocus: false,
diff --git a/src/libs/hooks/useGetMyNickname.ts b/src/libs/hooks/useGetMyNickname.ts
index f28fede8..5b2a5cdf 100644
--- a/src/libs/hooks/useGetMyNickname.ts
+++ b/src/libs/hooks/useGetMyNickname.ts
@@ -1,12 +1,13 @@
import { useQuery } from 'react-query';
import { useNavigate } from 'react-router-dom';
+import { QUERY_KEY } from '../../constants/queryKeys';
import { getMyNickName } from '../api/getMyNickName';
export default function useGetMyNickName() {
const navigate = useNavigate();
const { data: myNickName, isLoading } = useQuery(
- ['useGetMyNickName'],
+ QUERY_KEY.nickname.getNickName,
() => getMyNickName(),
{
onError: () => {
diff --git a/src/libs/hooks/usePostFavorite.ts b/src/libs/hooks/usePostFavorite.ts
index 4b5c39d9..271d185a 100644
--- a/src/libs/hooks/usePostFavorite.ts
+++ b/src/libs/hooks/usePostFavorite.ts
@@ -1,6 +1,7 @@
import { useMutation, useQueryClient } from 'react-query';
import { useNavigate } from 'react-router-dom';
+import { QUERY_KEY } from '../../constants/queryKeys';
import postFavorite from '../api/postFavorite';
const usePostFavorite = (state: string, bookUuid?: string) => {