구버전/React

[React] react-router-dom의 사용

고래강이 2023. 10. 4. 21:45

1. 중첩 라우팅

Outlet & 직접표기 비교

> Router.js
<Routes>
    <Route path="web/*" element={<Web />}>
    	<Route path=":id" element={<WebPost />} />
    </Route>
</Routes>

> Web.js
const Web = () => {
  return (
    <div>
      <h1>This is Web</h1>
      <ul>
        <li>
          <Link to="1">Post #1</Link>
        </li>
      </ul>
// 여기서 Outlet을 통해서 불러오는 곳
      <Outlet />
    </div>
  );
};
> Router.js
<Routes>
    <Route path="web/*" element={<Web />} />
</Routes>

> Web.js
const Web = () => {
  return (
    <div>
      <h1>This is Web</h1>
      <ul>
        <li>
          <Link to="1">Post #1</Link>
        </li>
      </ul>
// 비교부분
	  <Routes>
        <Route path=":id" element={<WebPost />} />
      </Routes>
    </div>
  );
};

결론 : 중첩라우팅을 통해서 Router.js 부분에 Route를 한눈에 볼 수 있게 되었음

 

2. useLocation && useParams && useNavigate

1) useLocation Hook

경로정보를 담고있는 객체를 return한다.

{
  pathname: '/product/1',
  search: '',
  hash: '',
  state: null,
  key: 'default'
}

2) useParams Hook

path parameter 정보를 담고있는 객체를 return한다.

<BrowserRouter>
	<Routes>
		<Route path='/product/:id' element={<ProductDetail />} />
	</Routes>
</BrowserRouter>

사전에 Route설정부분에서 동적으로 표기를 해주어야 한다. 

// 현재 경로: /product/1

function ProductDetail(props) {
  const params = useParams();
  console.log(params);
  
  return (
   ...
  )
}

// 콘솔 결과.
{
  id: 1,
}

3) useNavigate Hook

함수를 return 하는데 페이지를 이동시키는 함수를 반환한다.

// navigate 라는 변수에 useNavigate 라는 함수를 할당하였음.
const navigate = useNavigate();

const queryString = filterQuery.concat(sortQuery);
// navigate 함수의 인자에 이동하고자 하는 url을 전달하면 해당 url로 화면을 이동시킨다.
navigate(`?${queryString}`);

인자에 정수값을 넣으므로써 방문기록에 남아있는 경로들을 앞 뒤로 탐색할 수 있다. 

navigate(-1); // 뒤로가기
navigate(-2); // 뒤로 2페이지 가기
navigate(1); // 앞으로 가기