ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [React] React-Router-dom์œผ๋กœ ๋ฆฌ์•กํŠธ ์•ฑ์— ๋ผ์šฐํŒ… ๋งŒ๋“ค๊ธฐ
    WEB Dev/Javascript | REACT | Node.js 2023. 5. 5. 22:12
    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

    ๋Œ“๊ธ€

Designed by Tistory.