클라이언트/React
[리액트(React)] 동적 Route
Hana_h
2024. 2. 18. 11:18
// 동적 Route
- path가 고정되어 있지 않고 동적인 경우 :을 사용한다.
{ path: '/url/:식별자', element: jsx코드 },
- 해당 컴포넌트에서는 useParams를 사용하여 url에 입력된 param을 받아올 수 있다.
const params = useParams();
- param은 객체 형태로, path에서 :뒤에 적은 식별자명으로 해당 값을 받을 수 있다.
<p>{params.식별자}</p>


import { createBrowserRouter, RouterProvider } from 'react-router-dom';
import HomePage from './pages/Home';
import ProductsPage from './pages/Products';
import RootLayout from './pages/Root';
import ErrorPage from './pages/Error';
import ProductDetailPage from './pages/ProductDetail';
const router = createBrowserRouter([
{
path: '/',
element: <RootLayout />,
errorElement: <ErrorPage />,
children: [
{ path: '/', element: <HomePage /> },
{ path: '/products', element: <ProductsPage /> },
{ path: '/products/:productId', element: <ProductDetailPage /> },
],
},
]);
function App() {
return <RouterProvider router={router} />;
}
export default App;
import React from 'react';
import { Link } from 'react-router-dom';
const PRODUCTS = [
{ id: 'p1', title: 'Product 1' },
{ id: 'p2', title: 'Product 2' },
{ id: 'p3', title: 'Product 3' },
];
function ProductsPage() {
return (
<>
<h1>The Products Page</h1>
<ul>
{PRODUCTS.map((product) => (
<li key={product.id}>
<Link to={`/products/${product.id}`}>{product.title}</Link>
</li>
))}
</ul>
</>
);
}
export default ProductsPage;
import React from 'react';
import { Link, useParams } from 'react-router-dom';
function ProductDetailPage() {
const params = useParams();
return (
<>
<h1>Product Details!</h1>
<p>{params.productId}</p>
<p>
<Link to="..">Back</Link>
</p>
</>
);
}
export default ProductDetailPage;