Skip to content

Commit 159a925

Browse files
committed
[feat]뒤로가기 로직
1 parent 74538d3 commit 159a925

File tree

3 files changed

+23
-17
lines changed

3 files changed

+23
-17
lines changed

src/domains/recipe/components/main/Accordion.tsx

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import SelectBox from '@/shared/components/select-box/SelectBox';
44
import { Dispatch, SetStateAction, useEffect, useMemo } from 'react';
5-
import { useRouter, useSearchParams, usePathname } from 'next/navigation';
5+
import { useSearchParams, usePathname, useRouter } from 'next/navigation';
66

77
interface Props {
88
setAlcoholBaseTypes: Dispatch<SetStateAction<string[]>>;
@@ -65,11 +65,22 @@ const SELECT_OPTIONS = [
6565
];
6666

6767
function Accordion({ setAlcoholBaseTypes, setCocktailTypes, setAlcoholStrengths }: Props) {
68-
const router = useRouter();
68+
const router = useRouter()
6969
const pathname = usePathname();
7070
const searchParams = useSearchParams();
7171

72-
// 코드를 한글 라벨로 역변환하는 함수
72+
// url 파라미터에서 값을 가져와 POST를 도와줌
73+
useEffect(() => {
74+
const abv = searchParams.get('abv');
75+
const base = searchParams.get('base');
76+
const glass = searchParams.get('glass');
77+
78+
setAlcoholStrengths(abv ? [abv] : []);
79+
setAlcoholBaseTypes(base ? [base] : []);
80+
setCocktailTypes(glass ? [glass] : []);
81+
}, [searchParams, setAlcoholStrengths, setAlcoholBaseTypes, setCocktailTypes]);
82+
83+
// 파라미터 값을 한글로 역 변환해주는 함수
7384
const getDisplayValue = (id: string, code: string | null): string => {
7485
if (!code) return '전체';
7586

@@ -81,7 +92,8 @@ function Accordion({ setAlcoholBaseTypes, setCocktailTypes, setAlcoholStrengths
8192
return entry ? entry[0] : '전체';
8293
};
8394

84-
// URL 파라미터에서 현재 선택된 값 가져오기
95+
96+
// URL 파라미터에서 현재 선택된 값 가져오기 아코디언 UI에 적용
8597
const currentValues = useMemo(() => {
8698
return {
8799
abv: getDisplayValue('abv', searchParams.get('abv')),
@@ -90,21 +102,11 @@ function Accordion({ setAlcoholBaseTypes, setCocktailTypes, setAlcoholStrengths
90102
};
91103
}, [searchParams]);
92104

93-
// URL에서 상태 동기화
94-
useEffect(() => {
95-
const abv = searchParams.get('abv');
96-
const base = searchParams.get('base');
97-
const glass = searchParams.get('glass');
98-
99-
setAlcoholStrengths(abv ? [abv] : []);
100-
setAlcoholBaseTypes(base ? [base] : []);
101-
setCocktailTypes(glass ? [glass] : []);
102-
}, [searchParams, setAlcoholStrengths, setAlcoholBaseTypes, setCocktailTypes]);
103-
104105
const handleSelect = (id: string, value: string) => {
105106
const optionGroup = SELECT_OPTIONS.find((opt) => opt.id === id);
106107
if (!optionGroup) return;
107108

109+
// 선택한 옵션의 밸류를 전달
108110
const code = optionGroup.map[value as keyof typeof optionGroup.map] ?? null;
109111
const arr = code ? [code] : [];
110112

@@ -131,7 +133,7 @@ function Accordion({ setAlcoholBaseTypes, setCocktailTypes, setAlcoholStrengths
131133
}
132134

133135
const queryString = params.toString();
134-
const newUrl = `${pathname}${queryString ? `?${queryString}` : ''}`;
136+
const newUrl = `${pathname}?${queryString}`;
135137

136138

137139
router.push(newUrl)

src/domains/recipe/components/main/CocktailList.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import Link from 'next/link';
55
import { useIntersectionObserver } from '@/domains/shared/hook/useIntersectionObserver';
66
import { Cocktail } from '../../types/types';
77
import CocktailCard from '@/domains/shared/components/cocktail-card/CocktailCard';
8+
import { usePathname, useRouter, useSearchParams } from 'next/navigation';
89

910
interface Props {
1011
cocktails: Cocktail[];
@@ -15,6 +16,9 @@ interface Props {
1516
}
1617

1718
function CocktailList({ cocktails, RecipeFetch, hasNextPage, lastId, onItemClick }: Props) {
19+
const router = useRouter()
20+
const pathname = usePathname();
21+
const searchParams = useSearchParams();
1822
const cocktailRef = useRef(null);
1923
const onIntersect: IntersectionObserverCallback = ([entry]) => {
2024
if (!RecipeFetch) return;

src/domains/shared/hook/useMemoScroll.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export function useMemoScroll<T>({
2222

2323
// 뒤로가기를 통해 목록 복원을 저장해주는 플래그
2424
const NAVIGATION_FLAG_KEY = `${storageKey}_nav_flag`;
25-
25+
2626
// 실제 렌더링 되는 데이터
2727
const [data, setData] = useState<T[]>([]);
2828
const [lastId, setLastId] = useState<number | null>(null);

0 commit comments

Comments
 (0)