[React] React-Router-dom์œผ๋กœ ๋ฆฌ์•กํŠธ ์•ฑ์— ๋ผ์šฐํŒ… ๋งŒ๋“ค๊ธฐ

2023. 5. 5. 22:12ใ†WEB Dev/Javascript | REACT | Node.js

728x90

 

 

 

 

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

๋ฆฌ์•กํŠธ ๋ผ์šฐํŠธ ํŒจํ‚ค์ง€์˜ ๊ธฐ๋ณธ์ธ react-router-dom์„ ์ด์šฉํ•ด ๋ฆฌ์•กํŠธ ํŽ˜์ด์ง€์— ๋ผ์šฐํŒ…์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

 

 

๐Ÿ“Œ react-router-dom๋ž€

 

๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ ๋”์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ํŽ˜์ด์ง€ ๋ผ์šฐํŒ…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ๋ณด๋‚ด์ง€๋Š” ํŽ˜์ด์ง€๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ํŒŒ์ผ ๋‹จ์œ„๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ๋ฆฌ์•กํŠธ์™€ ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(Client-Side-Rendering)์˜ ๊ฒฝ์šฐ๋Š” ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ ํ™”๋ฉด๋งŒ ๋ณ€๊ฒฝ๋˜๋Š” ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— url์—์„œ ๋ณด์—ฌ์ง€๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ํ•ด์„œ ํ™”๋ฉด์ด๋‚˜ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

ํ•˜์ง€๋งŒ ํ•„์š”์— ์˜ํ•ด (๊ตฌ๊ธ€ ๋“ฑ์—์„œ ๊ฒ€์ƒ‰, ๋”ฅ ๋งํฌ ๋“ฑ์˜ ํ•„์š”) url์—์„œ ํŽ˜์ด์ง€๋ฅผ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•˜๊ณ , ์œ ์ €๋„ ๊ทธ๊ฒƒ์œผ๋กœ ํ™”๋ฉด์˜ ๋ณ€ํ™”๋ฅผ ์ธ์ง€ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์šฐํŒ…์ด ํ•„์š”ํ•˜๋‹ค.

 

๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ ๋”์„ ์ด์šฉํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š๊ณ , CSS๋‚˜ JS ํŒŒ์ผ์„ ์žฌํ‰๊ฐ€ ํ•˜์ง€ ์•Š๊ณ  ์ž์—ฐ์Šค๋Ÿฌ์šด ํ™”๋ฉด์˜ ๋ณ€ํ™”์™€ url์˜ ๋ณ€ํ™”๋ฅผ ๋งŒ๋“ค์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ“Œ react-router-dom ์‚ฌ์šฉํ•˜๊ธฐ

 

1. react-router-dom ์„ค์น˜ํ•˜๊ธฐ

 

//npm ์‚ฌ์šฉ
npm install react-router-dom

//yarn ์‚ฌ์šฉ
yarn add react-router-dom

 

 

2. App.js ์— createBrowserRouter๋กœ ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ

 

๋ฐฉ๋ฒ•์ด ๋‘ ๊ฐ€์ง€์ธ๋ฐ createRoutesFromElements๋กœ ๋ธŒ๋ผ์šฐ์ € ๋ผ์šฐํ„ฐ๋ฅผ ์ƒ์„ฑ(createBrowserRouter)ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด ๋ฐ”๋กœ ๋ธŒ๋ผ์šฐ์ € ๋ผ์šฐํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

path์— url์˜ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๊ณ , ํ•ด๋‹น ๊ฒฝ๋กœ์—์„œ ๋ Œ๋”๋ง ๋  ์ปดํฌ๋„ŒํŠธ๋ฅผ element์— ์ž‘์„ฑํ•ด์ค€๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๊ฐ์ฒด๋‚˜ ์—˜๋ฆฌ๋จผํŠธ ์ƒ์„ฑ ๋ฐฉ์‹ ๋ชจ๋‘ ๋™์ผํ•˜๋‹ค.

import { Route, RouterProvider, createBrowserRouter, createRoutesFromElements } from "react-router-dom";

// createRoutesFromElements
// ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๋ธŒ๋ผ์šฐ์ € ๋ผ์šฐํ„ฐ ์ƒ์„ฑ
const routerElement = createRoutesFromElements(
	<Route>
    	<Route path='/' element={<HomePage/>} />
        <Route path="/products" element={<ProductsPage />}/>
    </Route>
);
const router = createBrowserRouter(routerElement);


// createBrowserRouter 
// ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ๋ธŒ๋ผ์šฐ์ € ๋ผ์šฐํ„ฐ ์ƒ์„ฑ
const router = createBrowserRouter({
  path: '/',
  element: <HomePage />
});

 

3. App ์ปดํฌ๋„ŒํŠธ์— RouterProvider๋กœ ๋ผ์šฐํŠธ ๋ฟŒ๋ ค์ฃผ๊ธฐ

 

์œ„์—์„œ ๋งŒ๋“  ๋ธŒ๋ผ์šฐ์ € ๋ผ์šฐํ„ฐ 'router'๋ฅผ RouterProvider๋ฅผ ์ด์šฉํ•ด ์ปดํฌ๋„ŒํŠธ ์ „์ฒด์— ๋ฟŒ๋ ค์ค€๋‹ค. ์ด๋Š” Context์™€ ๋น„์Šทํ•˜๋‹ค. 

๋ฆฌ์•กํŠธ Context ์•Œ์•„๋ณด๊ธฐ

 

import { Route, RouterProvider, createBrowserRouter, createRoutesFromElements } from "react-router-dom";

const App = () => {
	return <RouterProvider router={router}></RouterProvider>
        //return <RouterProvider router={router} />
};
export default App;

 

 

๐Ÿ“Œ ์ถœ์ฒ˜ ๋ฐ ์ฐธ๊ณ ๋ฌธ์„œ

 

๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ ๋” react-router-dom ๊ณต์‹ ๋ฌธ์„œ

728x90