-
NextJS에서 queryString 변경 감지 hook 만들기Language/React 2023. 10. 20. 09:43
NextJS 환경에서 `/aaa?arg1=111` 경로를 `/aaa?arg1=222`로 push 혹은 replace 헀을떄 arg1를 받아오는 hook을 생성하는 과정을 간략하게 정리해 놓는다.
useQuery 훅 생성
필자는 p가 팝업레이어 아이디인데 path가 바뀔때 그부분은 제외한 로직이다.
export function useQuery() { const router = useRouter(); const [query, setQuery] = useState(router.query); useEffect(() => { const beforeQuery = { ...query }; const afterQuery = { ...router.query }; // 팝업 파라미터 제외 (레이어 팝업) delete beforeQuery.p; delete afterQuery.p; const arraysAreEqual = (arrA, arrB) => { if (arrA.length !== arrB.length) { return false; } for (let i = 0; i < arrA.length; i++) { if (arrB.includes(arrA[i]) === false) { return false; } } return true; }; if (!arraysAreEqual(Object.keys(beforeQuery), Object.keys(afterQuery))) { // if (query !== router.query) { setQuery(router.query); } }, [router.query]); return { query, }; }
useQuery 훅을 통한 이벤트 처리
... import { useRouter } from 'next/router'; import { useQuery } from '../../../../hook/commonHook'; const NoticeList = (props) => { const router = useRouter(); const { query } = useQuery(); ... useEffect(() => { console.log('query : ', query); // fetch logic }, [query]); return ( <> ... </> ); }; export default memo(NoticeList);
제 블로그는 공유하는것 보단 노트성 블로그!!
'Language > React' 카테고리의 다른 글
react에 typescript 적용하기 (1) 2023.12.27 react-hook-form 적용기 (antd) (0) 2023.12.18 React Loop 모음 (0) 2023.05.11 React/InfiniteScroll - 외부 collection (0) 2022.12.02 React/InfiniteScroll - 내부 collection (0) 2022.12.02