diff --git a/src/pages/ChallengesPage.tsx b/src/pages/ChallengesPage.tsx index ddc9d21..feecbba 100644 --- a/src/pages/ChallengesPage.tsx +++ b/src/pages/ChallengesPage.tsx @@ -5,63 +5,47 @@ import Chips from "@domain/ChallengesPage/Chips"; import useChallenges from "@hooks/quries/useChallenges"; import useChannels from "@hooks/quries/useChannels"; import usePageTitle from "@hooks/usePageTitle"; -import { Channel, Post } from "src/types"; +import { useNavigate, useParams } from "react-router-dom"; +import { Channel } from "src/types"; const ChallengesPage = () => { usePageTitle("채널"); - const [selectedChannelId, setSelectedChannelId] = useState( - window.location.pathname.split("/")[2] - ); - const { data: channelsData } = useChannels(); - const { data: challengesData } = useChallenges(selectedChannelId); - const [channels, setChannels] = useState(); // 채널 목록 데이터전체 - const [challenges, setChallenges] = useState(); // 선택된 채널의 포스트 목록 + const navigate = useNavigate(); + const { channelId } = useParams(); + const { data: channelsData } = useChannels(); // 채널 목록 데이터전체 + const { data: challengesData } = useChallenges(channelId); // 선택된 채널의 포스트 목록 const [selectedChannel, setSelectedChannel] = useState(); // 선택된 채널 데이터전체 - const windowListener = () => { - const clickedChannel = window.location.pathname.split("/")[2]; - setSelectedChannelId(clickedChannel); - }; - useEffect(() => { - setChannels(channelsData); - - window.addEventListener("popstate", windowListener); - return () => { - window.removeEventListener("popstate", windowListener); - }; + setSelectedChannel( + channelsData?.filter((item: Channel) => item._id === channelId)[0] + ); }, [channelsData]); useEffect(() => { - setChallenges(challengesData); - }, [challengesData]); - - useEffect(() => { - setChallenges(challengesData); - const clickedChannel = channels?.filter( - (item) => item._id === selectedChannelId + const clickedChannel = channelsData?.filter( + (item) => item._id === channelId )[0]; setSelectedChannel(clickedChannel); - }, [selectedChannelId]); + }, [channelId]); const onClickChips = (event: React.MouseEvent) => { const target = event.target as HTMLButtonElement; const channelDescription = target.dataset.description; - const { _id } = channels.filter( + const { _id } = channelsData.filter( (item) => item.description === channelDescription )[0]; - setSelectedChannelId(_id); - history.pushState(null, null, `/challenges/${_id}`); + navigate(`/challenges/${_id}`); }; return ( <> challenge.description)} + names={(channelsData || []).map((challenge) => challenge.description)} selectedChip={selectedChannel?.description || "독서"} onClickProp={onClickChips} /> - + ); };