|
1 | | -import { useState, useEffect } from "react"; |
| 1 | +import { useState, useEffect, useCallback } from "react"; |
2 | 2 | import { useToast } from "@/hooks/useToast"; |
3 | 3 | import { useSearchParams, useNavigate } from "react-router-dom"; |
4 | 4 | import { IoRefresh } from "react-icons/io5"; |
@@ -65,34 +65,33 @@ export default function Group() { |
65 | 65 | fetchUserInfo(); |
66 | 66 | }, []); |
67 | 67 |
|
68 | | - useEffect(() => { |
69 | | - if (isSearching) return; |
70 | | - |
71 | | - const fetchGroupList = async () => { |
72 | | - try { |
73 | | - const response = await groupService.getGroupList({ |
74 | | - type: isPublic ? "public" : "private", |
75 | | - sortBy, |
76 | | - keyword: "", |
77 | | - page: currentPage, |
78 | | - }); |
79 | | - |
80 | | - if (response.status === "success") { |
81 | | - setGroupData(response.data.groups || []); |
82 | | - setTotalPages(response.data.totalPage); |
83 | | - } else { |
84 | | - throw new Error("그룹 목록 조회 실패"); |
85 | | - } |
86 | | - } catch { |
87 | | - if(isLogin) addToast("그룹 목록 조회에 실패했습니다."); |
| 68 | + const fetchGroupList = useCallback(async () => { |
| 69 | + if (isSearching) return; // 검색 중이면 요청하지 않음 |
| 70 | + |
| 71 | + try { |
| 72 | + const response = await groupService.getGroupList({ |
| 73 | + type: isPublic ? "public" : "private", |
| 74 | + sortBy, |
| 75 | + keyword: "", |
| 76 | + page: currentPage, |
| 77 | + }); |
| 78 | + |
| 79 | + if (response.status === "success") { |
| 80 | + setGroupData(response.data.groups || []); |
| 81 | + setTotalPages(response.data.totalPage); |
88 | 82 | } |
89 | | - }; |
90 | | - |
| 83 | + } catch { |
| 84 | + addToast("그룹 목록 조회에 실패했습니다."); |
| 85 | + } |
| 86 | + }, [isPublic, sortBy, currentPage, isSearching, addToast]); |
| 87 | + |
| 88 | + useEffect(() => { |
91 | 89 | fetchGroupList(); |
92 | | - }, [isPublic, sortBy, currentPage, isSearching, groupData]); |
| 90 | + }, [fetchGroupList]); |
| 91 | + |
93 | 92 |
|
94 | 93 | useEffect(() => { |
95 | | - setSortBy(searchParams.get("sortBy") || "mostLiked"); |
| 94 | + setSortBy(searchParams.get("sortBy") || "latest"); |
96 | 95 | }, [searchParams]); |
97 | 96 |
|
98 | 97 | const handleLoginModal = (type) => { |
|
0 commit comments