[React] React-router

์ง„์ฃผยท2022๋…„ 3์›” 11์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
4/4

๐ŸŒž ํ™˜๊ฒฝ ์„ค์ •

npx create-react-app react-router-dom ์„ ํ†ตํ•ด react ์‹ค์Šตํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ

[๊ฒฐ๊ณผ]


๐Ÿš— React-router ์„ค์น˜ํ•˜๊ธฐ

npm install react-router-dom ์„ ํ†ตํ•ด react-router ์„ค์น˜ํ•˜๊ธฐ


๐Ÿš index.js ์ฝ”๋“œ ์ˆ˜์ •ํ•˜๊ธฐ

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter , Route, Routes } from 'react-router-dom';
import './index.css';
import reportWebVitals from './reportWebVitals';
import * as serviceWorker from './serviceWorker';


function Home() {
  return(
    <div>
      <h2>Home</h2>
      Home...
    </div>
  )
}

function Topics() {
  return(
    <div>
      <h2>Topics</h2>
      Topics...
    </div>
  )
}


function Contact(){
  return(
    <div>
      <h2>Contact</h2>
      Contact...
    </div>
  )
}

function App() {
  return(
    <div>
      <h1>React Router DOM example</h1>
      <ul>
        <li><a href="/">Home</a></li>
        <li><a href="/topics">Topics</a></li>
        <li><a href="/contact">Contact</a></li>
      </ul>

      <Route exact path="/"><Home></Home></Route>
      <Route path="/topics"><Topics></Topics></Route>
      <Route path="/contact"><Contact></Contact></Route>
      <Route path="/">Not found</Route>
      
    </div>
  )
}

ReactDOM.render(
  // BrowserRouter๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋˜์—ˆ๋‹ค.
  <BrowserRouter>
    <App />
  </BrowserRouter>,
  document.getElementById('root')
);


reportWebVitals();
serviceWorker.unregister();

[๊ฒฐ๊ณผ]

ํ„ฐ๋ฏธ๋„์— npm start ์ž…๋ ฅ

์˜ค๋ฅ˜!!๐Ÿ˜ฅ

Route ํƒœ๊ทธ๋Š” Routes์˜ element๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผํ•œ๋‹ค.

์˜ค๋ฅ˜ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์ฝ”๋“œ ๋ณ€๊ฒฝ1

    <Routes>
      <Route exact path="/"><Home></Home></Route>
      <Route path="/topics"><Topics></Topics></Route>
      <Route path="/contact"><Contact></Contact></Route>
      <Route path="/">Not found</Route>
    </Routes>

Route ์ปดํฌ๋„ŒํŠธ๋ฅผ Routes๋กœ ๊ฐ์‹ธ์ค€๋‹ค.

[๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฒฐ๊ณผ]

๋˜๋‹ค๋ฅธ ์˜ค๋ฅ˜ ๋ฐœ์ƒ๐Ÿ˜…

Home ์ปดํฌ๋„ŒํŠธ๊ฐ€ Route ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ ํ•œ๋‹ค!!

๋ฌธ์ œํ•ด๊ฒฐ์„ ์œ„ํ•ด ์ฐธ๊ณ ํ•œ ์ž๋ฃŒ
https://velog.io/@developerjhp/Error-App-is-not-a-Route-component.-All-component-children-of-Routes-must-be-a-Route-or-React.Fragment

์—ฌ๊ธฐ๋ฅผ ๋ณด๊ณ  Route์˜ element๋กœ ์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง‘์–ด๋„ฃ์–ด์•ผํ•˜๋Š”๊ตฌ๋‚˜ ์‹ถ์—ˆ๋‹ค!

์˜ค๋ฅ˜ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์ฝ”๋“œ ๋ณ€๊ฒฝ2

      <Routes>
        <Route exact path="/" element={<Home/>}/>
        <Route path="/topics" element={<Topics/>}/>
        <Route path="/contact" element={<Contact/>}/>
      </Routes>

๊ฒฐ๊ณผ

Topics ํด๋ฆญ์‹œ


๐Ÿ‘€ ์ˆ˜์ • ์ „ ์ฝ”๋“œ

๐Ÿ‘€โœ…์ˆ˜์ • ํ›„ ์ฝ”๋“œ

	import { BrowserRouter , Route, Routes , Link } from 'react-router-dom';

        <li><Link to="/">Home</Link></li>
        <li><Link to="/topics">Topics</Link></li>
        <li><Link to="/contact">Contact</Link></li>

๐ŸŽจ Link๋ฅผ NavLink๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด?

๊ฒฐ๊ณผ๋Š” ๋™์ผํ•˜์ง€๋งŒ, console์ฐฝ์„ ํ™•์ธํ•ด๋ณด๋ฉด

Home์— class="active" ๊ฐ€ ์ƒ์„ฑ๋๋‹ค!!

์ดํ›„, Topics๋ฅผ ํด๋ฆญํ•˜๋ฉด ?

Topics๋กœ class="active" ๊ฐ€ ์˜ฎ๊ฒจ ๊ฐ„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค

์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์ด ์–ด๋–ค ํŽ˜์ด์ง€์— ์œ„์น˜ํ•ด ์žˆ๋Š”์ง€ ์ง๊ด€์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค

profile
์ง„์ฃผ์˜ ์ฝ”๋”ฉ์ผ๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€