v6 : 버전 체크
useParams
를 사용하여 어떤 페이지를 보여줘야할지 전달useSearchParams
를 사용하여 URL과 함께 데이터를 전달할 수 있는 가장 쉽고 간단한 방법useNavigator
를 사용하여 페이지를 이동시키기src/App.js
<Route path="/diary/:id" element={<Diary />} />
src/pages/diary.js
import { useParams } from "react-router-dom"; // custom hooks
const Diary = () => {
const { id } = useParams(); // pathVariable = id (경로의 변수 담아서 전달)
console.log(id); // id check (콘솔에 출력)
return (
<div>
<h1>Diary</h1>
<p>이곳은 다이어리 상세 페이지 입니다.</p>
</div>
);
}
export default Diary;
일기 데이터의 id
를 넣어주게 됨URL에 변수를 담아서 전달하는 방법
을 경로의 변수를 사용한다고 하여 pathVariable
이라고 부름useParams
라는 custom hook을 사용해서 가져올 수 있음 (import). custom hook을 통해 일기의 id 같은 것을 전달해서 꺼내올 수 있음custom hook
리액트의 hook은 아니지만 별도 라이브러리가 자신의 라이브러리 기능을 더 편하게 이용할 수 있도록 만들어준 사용자 정의 hook
Query String
은 pathVariable과 유사하게 URL을 사용하면서 /edit?id=10&mode=dark 이런 식으로 name과 value를 엮어서 데이터를 전송
할 수 있는 기법ex) Query String을 한번 확인해보면 이 페이지는 이런 식으로 데이터를 처리하는구나라고 어느 정도 유추해볼 수 있음
https://www.coupang.com/vp/products/209272?itemId=1008939&vendorItemId=3087575897&isAddedCart=
기존 URL 뒤에 ?id=10&mode=dark같은 이런 경로들은 페이지 라우팅하는 경로에 영향을 안 준다
는 의미로 받아들이면 됨src/page/edit.js
import { useSearchParams } from "react-router-dom"; // custom hook
const Edit = () => {
// 배열을 반환 (비구조화 할당)
// 첫번째 인덱스는 get 메소드를 활용해 꺼내쓰는 용도로 사용
// 두번째 인덱스는 첫번째 인덱스를 변경시키는 용도 (=Query String을 바꿀 수 있다)
const [searchParams, setSearchParams] = useSearchParams();
// id 꺼내기
const id = searchParams.get("id");
console.log("id :", id); // 콘솔에 출력
// mode 꺼내기
const mode = searchParams.get("mode");
console.log("mode :", mode);
return (
<div>
<h1>Edit</h1>
<p>이곳은 수정페이지 입니다.</p>
// setSearchParams를 바꾸는 버튼 추가
// 실시간으로 Query String을 변경시킬 수 있음
<button onClick={()=>setSearchParams({who: "winterlood"})}>QS Change</button>
</div>
);
}
export default Edit;
pathVariable과 Query String을 활용하면 우리가 어떤 페이지에든 어떤 데이터든 다 전달할 수 있다
useNavigator
라는 또 다른 react-router의 custom hook 활용해 다른 페이지로 이동할 수 있게 하기src/pages/Edit.js
import { useNavigate, useSearchParams } from "react-router-dom";
const Edit = () => {
// navigate 함수를 useNavigate에 담기
const navigate = useNavigate();
const [searchParams, setSearchParams] = useSearchParams();
const id = searchParams.get("id");
console.log("id :", id);
const mode = searchParams.get("mode");
console.log("mode :", mode);
return (
<div>
<h1>Edit</h1>
<p>이곳은 수정페이지 입니다.</p>
<button onClick={()=>setSearchParams({who: "winterlood"})}>QS Change</button>
// 이동 버튼 추가
<button onClick={()=>{navigate("/home")}}>홈으로 가기</button>
<button onClick={()=>{navigate(-1)}}>뒤로 가기</button>
</div>
);
}
export default Edit;
navigate 기능
- 이런 페이지 이동은 가령 로그인하지 않은 사용자가 로그인 페이지로 가려고 할 때 그 때 로그인 값을 검사해서 로그인을 안 했다면 로그인 페이지로 강제로 보내버리는 기능을 위해서 존재한다.
- 링크 태그를 클릭하지 않아도 의도적으로 페이지를 바꿔버릴 수 있다.
Custom.훅인.useParam과 useSearchParam코드좀 볼수있을까용?