์ค์นํ๊ธฐBrowserRouterRoute์ ํํ ๊ฒฝ๋ก ์ค์ : exactComponent props ์ ๋ฌํ๊ธฐLinkSwitch์ค์ฒฉ๋ผ์ฐํฐRoute ์ฌ์ฉํ์ฌ ํ์ด์ง ๊ฒฝ๋ก ๋ง๋ค๊ธฐReactRouter V6๊ฐ ๋๋ฉด์ ๋ฌ๋ผ์ง ๋ฌธ๋ฒ๋ค1. Routes2. exact๊ฐ ์ฌ๋ผ์ง๋ค3. element4. Route์ ๋ถ๋ชจ๋ก Routes5. ์ค์ฒฉ๋ ๋ผ์ฐํฐ
ย
React Router v4/5 docs ๊ธฐ์ค์
๋๋ค. v6์ 2021๋
11์์ ๋์์ต๋๋ค.
ย
React Router ์ฝ๋
์ค์นํ๊ธฐ
App์ ๋ณด๊ฒ๋๋ฉด ์ด 3๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด๊ฒ๋ค์ ๋ชจ๋ ๋ค๋ฅธ ์ฃผ์ ๋ฅผ ๊ฐ์ง๊ณ ์์ด ๋ค๋ฅธํ์ด์ง์์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ต๋๋ค.
๋ฐ๋ผ์ ์ง๊ธ๊น์ง ์งํํ ๋ด์ฉ์ ์ฌ๋ฌ ์ฃผ์๋ก ๋๋๊ณ ๊ฐ ์ฃผ์๋ณ๋ก ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ํ์ฌ 3๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ฐ๊ฐ์ ์ฃผ์๋ฅผ /hello, /resume, /time ์ผ๋ก ๊ตฌ์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
ย
๋จผ์ ๋ผ์ฐํธ ์ค์ ์ ์ํด react-router-dom ์ ์ค์นํด ์ฃผ๊ฒ ์ต๋๋ค.
npm install react-router-dom@5.2.0
ย
- ์ฐ์ ๊ฐ๋จํ๊ฒ ๋จผ์ ์ค์ตํด๋ด ์๋ค.
import React from "react"; import { BrowserRouter, Route } from "react-router-dom"; function App() { return ( <BrowserRouter> {/* ๋ผ์ฐํธ๋ฅผ ๊ฐ์ธ์ค๋๋ค. */} <Route path="/" component={Index}/> <Route path="/one" component={One}/> <Route path="/two" component={Two}/> <Route path="/three" component={Three}/> </BrowserRouter> ); } function Index(){ return <h1>hello world0</h1> } function One(){ return <h1>hello world1</h1> } function Two(){ return <h1>hello world2</h1> } function Three(){ return <h1>hello world3</h1> } export default App;
BrowserRouter
์ฐ๋ฆฌ๋ ๋ผ์ฐํ
์ ์ํด BrowserRouter๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ๊ฒ์
๋๋ค. ๋ผ์ฐํธ๊ฐ ๋์ํ ๋ถ๋ถ์ ๊ฐ์ธ์ฃผ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ ์ฃผ์๋ณ๋ก ๋ผ์ฐํ
์ ํ๊ธฐ ์ํด Route์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
<Route path="์ฃผ์" component={์ปดํฌ๋ํธ}/>
์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์์ฑํ๋ฉด ๋ฉ๋๋ค. ์๋ ์ฝ๋์ ์ฃผ์์ผ๋ก ๊ฐ๋จํ๊ฒ ์ค๋ช
ํ๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.import React from 'react'; import {BrowserRouter, Route} from 'react-router-dom // ์ฌ์ฉํ ์ปดํฌ๋ํธ ์ถ๊ฐํ๊ธฐ import Hello from './Components/Hello' import Time from './Components/Time' import Resume from './Components/Resume' function App() { return ( <BrowserRouter>{/* ๋ผ์ฐํธ๋ฅผ ๊ฐ์ธ์ค๋๋ค. */} <Route path="/hello" component={Hello}/>{/* ๊ฐ๊ฐ ์ฃผ์์ ์ปดํฌ๋ํธ๋ฅผ ์ ๋ ฅํด ์ฌ์ฉ */} <Route path="/time" component={Time}/> <Route path="/resume" component={Resume}/> </BrowserRouter> ); } export default App;
ย
Route
์์ ๋ง๋ ๋ผ์ฐํธ์์์ "/", ์ฆ ๋ฉ์ธํ์ด์ง๋ก ์ด๋ํ๋ฉด ์๋ฌด๊ฒ๋ ๋์ค์ง ์์ต๋๋ค. ํ ํ๋ฉด์ ๋ง๋ค๊ธฐ ์ํด ๋จ๊ฒจ๋๋๋ฐ์. Components ํด๋์ Home.js ํ์ผ์ ํ๋ ๋ง๋ค์ด๋๊ณ ์๋์ ๊ฐ์ด ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
import React from 'react'; function Home(props) { return( <div> <h1>Home ํ๋ฉด!</h1> </div> ) } export default Home
ย
App.js์๋ ๋ผ์ฐํธ๋ฅผ ํ๋ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
import React from 'react'; import {BrowserRouter, Route} from 'react-router-dom' import Hello from './Components/Hello' import Time from './Components/Time' import Resume from './Components/Resume' import Home from './Components/Home'; function App() { return ( <BrowserRouter> <Route path="/" component={Home}/> <Route path="/hello" component={Hello}/> <Route path="/time" component={Time}/> <Route path="/resume" component={Resume}/> </BrowserRouter> ); } export default App;
ย
์ด ์ํ์์ ์ฃผ์์ ์ ์ํ๋ฉด ํ ํ๋ฉด์ด ์ ๋๋ก ๋์ต๋๋ค!
๋ค์ '/hello' ํ์ด์ง๋ก ์ด๋ํด๋ณด๊ฒ ์ต๋๋ค.
ย
์ ๋์จ๊ฒ ๊ฐ์๋ฐ ํ ํ๋ฉด์ด ๊ฐ์ด ์ถ๋ ฅ๋์์ต๋๋ค. ์ด๋ฐ ํ์์ '/' ์ฃผ์์ '/hello'์ ์ฃผ์ ์ฌ์ด์์ '/' ์ด ๋ถ๋ถ์ด ์ค์ฒฉ๋์ด ๋ฐ์ํ๋ ํ์์
๋๋ค.
์ถ๊ฐ์์
Time ์ปดํฌ๋ํธ์ path๋ฅผ โ/hello/timeโ์ผ๋ก ์์ ํด๋ด
์๋ค.
import React from 'react'; import {BrowserRouter, Route} from 'react-router-dom' import Hello from './Components/Hello' import Time from './Components/Time' import Resume from './Components/Resume' import Home from './Components/Home'; function App() { return ( <BrowserRouter> <Route path="/" component={Home}/> <Route path="/hello/" component={Hello}/> <Route path="/hello/time" component={Time}/> <Route path="/resume" component={Resume}/> </BrowserRouter> ); } export default App;
/hello/time ๋ฅผ ์ ์ํ๋ฉด /hello ์ /hello/time์ด ๋์์ ์ถ๋ ฅ๋๊ฒ ๋ฉ๋๋ค.
'/hello' ๋ถ๋ถ์ด ๊ฒน์น๊ธฐ ๋๋ฌธ์ด์์!
ย
์ ํํ ๊ฒฝ๋ก ์ค์ : exact
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด Route์๋ exact๋ผ๋ props๊ฐ ์กด์ฌํฉ๋๋ค. (Router๋ ์ปดํฌ๋ํธ!) ์ฃผ์๊ฐ ์ ํํ๊ฒ ์ผ์นํ์ ๋๋ง ๋์ํ๊ฒ ํฉ๋๋ค. ์ด๋ฅผ ์ ์ฉํด ๋ด
์๋ค.
// ๊ธฐ์กด์ฝ๋ import React from "react"; import { BrowserRouter, Route } from "react-router-dom"; import Hello from "./Components/Hello"; import Time from "./Components/Time"; import Resume from "./Components/Resume"; import Home from "./Components/Home"; function App() { return ( <BrowserRouter> <Route path="/" exact component={Home} /> <Route path="/hello/" exact component={Hello} /> <Route path="/hello/time" exact component={Time} /> <Route path="/resume" exact component={Resume} /> </BrowserRouter> ); } export default App;
Component props ์ ๋ฌํ๊ธฐ
ํ์ฌ props๋ฅผ ์ ๋ฌํด์ผํ ์ปดํฌ๋ํธ๋ Hello์ Resume์
๋๋ค. ์ปดํฌ๋ํธ์ props๋ฅผ ์ ๋ฌํด๋ด
์๋ค.
1) Route์ render ์์ฑ ์ฌ์ฉํ์ฌ props ์ ๋ฌํ๊ธฐ
2) ์์์ผ๋ก ๋ ๋ํ์ฌ ์ปดํฌ๋ํธ์ props ์ ๋ฌํ๊ธฐ
import React from "react"; import { BrowserRouter, Route } from "react-router-dom"; import Hello from "./Components/Hello"; import Time from "./Components/Time"; import Resume from "./Components/Resume"; import Home from "./Components/Home"; function App() { return ( <BrowserRouter> <Route path="/" exact component={Home} /> <Route path="/hello" exact render={() => <Hello name="๊ฐ๋ฆฌ" />} /> <Route path="/time" exact component={Time} /> <Route path="/resume" exact> <Resume hello="Hello" name="๊ฐ๋ฆฌ" hobby="๊ฒ์" food="๊ณ ๊ธฐ" color="blue" /> </Route> </BrowserRouter> ); } export default App;
ย
Link
<Link>
<Link to="/about">home</Link>
ย
to ์์ฑ์๋ ์ ๊ทผํ ๊ฒฝ๋ก๊ฐ ๋ค์ด๊ฐ๋๋ค. ๋ฌธ์์ด์ด๋ ๊ฐ์ฒด์ ํํ๋ก ๊ฒฝ๋ก๋ฅผ ๋ฃ์ด์ค ์ ์์ต๋๋ค.
๋ฌธ์์ด์ ๊ฒฝ์ฐ html ํ๊ทธ์
<a>
์ ์์ฑ href
์ ๋ฃ์ด์ค ๊ฐ์ฒ๋ผ ์ ๋๊ฒฝ๋ก ๋๋ ์๋๊ฒฝ๋ก๋ฅผ ๋ฌธ์์ด์ ํํ๋ก ์์ฑํด์ฃผ๋ฉด ๋ฉ๋๋ค. ๊ฐ์ฒด๋ก ๋ฃ์ด์ค ๊ฒฝ์ฐ pathname, search, hash, state ํ๋กํผํฐ์ ๊ฐ๋ค์ ๋ฃ์ด์ ๊ฐ์ฒด ํํ๋ก ์์ฑํฉ๋๋ค.
// Link ์์ฑํ๋ ๋ฐฉ๋ฒ // ๋ฌธ์์ด <Link to="/courses?sort=name" /> // ๊ฐ์ฒด <Link to={{ pathname: "/courses", search: "?sort=name", hash: "#the-hash", state: { fromDashboard: true } }} />
ย
ย
aํ๊ทธ๋ฅผ ์ฐ์ง์๊ณ link ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๋ญ๊น์?
aํ๊ทธ๋ ํด๋ฆญํ์ ๊ฒฝ์ฐ, href์ ์ค์ ํด์ค ๊ฒฝ๋ก ์ด๋๊ณผ ๋์์ ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค๊ธฐ๋๋ฌธ์ ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ์ด ๋ฉ๋๋ค.
react-router-dom์ด ์ ๊ณตํ๋ Link์ ๊ฒฝ์ฐ HTML5 History API๋ฅผ ์ฌ์ฉํด์ ๋ธ๋ผ์ฐ์ ์ ์ฃผ์๋ฅผ ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค์ง ์๊ณ , dom๋ง ์กฐ์ํด์ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค.
ย
import React from "react"; import { BrowserRouter, Route, Link } from "react-router-dom"; import Hello from "./Components/Hello"; import Time from "./Components/Time"; import Resume from "./Components/Resume"; import Home from "./Components/Home"; function App() { return ( <BrowserRouter> <Link to="" style={{ margin: "0 5px" }}> ํ </Link> <Link to="/time" style={{ margin: "0 5px" }}> ํ์ฌ์๊ฐ </Link> <Link to="/hello" style={{ margin: "0 5px" }}> ์๋ </Link> <Link to="/Resume" style={{ margin: "0 5px" }}> ์๊ฐ </Link> <Route path="/" exact component={Home} /> <Route path="/hello" exact render={() => <Hello name="๊ฐ๋ฆฌ" />} /> <Route path="/time" exact component={Time} /> <Route path="/resume" exact> <Resume hello="Hello" name="๊ฐ๋ฆฌ" hobby="๊ฒ์" food="๊ณ ๊ธฐ" color="blue" /> </Route> </BrowserRouter> ); } export default App;
ํ์ ํด๋ฆญ : localhost:3000/
ํ์ฌ์๊ฐ์ ํด๋ฆญ : localhost:3000/time
์๊ฐ๋ฅผ ํด๋ฆญํ๋ฉด : localhost:3000/resume
์๋
์ ํด๋ฆญํ๋ฉด : localhost:3000/hello
ย
Switch
๊ธฐ์กด Route์
exact
๋ฅผ ์ฌ์ฉํ์ฌ๋ ๋์ง๋ง, exact
์ ๊ฒฝ์ฐ Route๋ง๋ค ๊ฐ๊ฐ ์ค์ ์ ํด์ค์ผํฉ๋๋ค. <Switch>
๋ก Route๋ค์ ๊ฐ์ธ์ฃผ๋ฉด ์ฒซ๋ฒ์งธ๋ก ๋งค์นญ๋๋ path (์๋ ์ฝ๋์์๋ โ/โ) ๋ฅผ ๊ฐ์ง ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋ง์ํค๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ์๋จ์ ์ปดํฌ๋ํธ์๋ง exact
๋ฅผ ์์ฑํฉ๋๋ค.import React from "react"; import { BrowserRouter, Route, Switch, Link } from "react-router-dom"; import Hello from "./Components/Hello"; import Time from "./Components/Time"; import Resume from "./Components/Resume"; import Home from "./Components/Home"; function App() { return ( <BrowserRouter> <Link to="" style={{ margin: "0 5px" }}> ํ </Link> <Link to="/time" style={{ margin: "0 5px" }}> ํ์ฌ์๊ฐ </Link> <Link to="/hello" style={{ margin: "0 5px" }}> ์๋ </Link> <Link to="/Resume" style={{ margin: "0 5px" }}> ์๊ฐ </Link> <Switch> <Route path="/" exact component={Home} /> <Route path="/hello" render={() => <Hello name="๊ฐ๋ฆฌ" />} /> <Route path="/time" component={Time} /> <Route path="/resume"> <Resume hello="Hello" name="๊ฐ๋ฆฌ" hobby="๊ฒ์" food="๊ณ ๊ธฐ" color="blue" /> </Route> </Switch> </BrowserRouter> ); } export default App;
ย
์ค์ฒฉ๋ผ์ฐํฐ
ํ๋์ ๊ฒฝ๋ก์์ ๋ ์ธ๋ถ์ ์ผ๋ก ๊ฒฝ๋ก๋ฅผ ๋๋ ๋ ์ฌ์ฉํฉ๋๋ค. ๋ผ์ฐํ
์ด ๋๊ณ ๊ทธ ์์์ ๋ผ์ฐํ
์ด ํ ๋ฒ ๋ ๋๋ ํํ์
๋๋ค.
import React from "react"; import { BrowserRouter, Route, Switch, Link } from "react-router-dom"; import Hello from "./Components/Hello"; import Time from "./Components/Time"; import ResumeRouter from "./Components/ResumeRouter"; import Home from "./Components/Home"; function App() { return ( <BrowserRouter> <Link to="" style={{ margin: "0 5px" }}> ํ </Link> <Link to="/time" style={{ margin: "0 5px" }}> ํ์ฌ์๊ฐ </Link> <Link to="/hello" style={{ margin: "0 5px" }}> ์๋ </Link> <Link to="/resume" style={{ margin: "0 5px" }}> ์๊ฐ </Link> <Switch> <Route path="/" exact component={Home} /> <Route path="/hello" render={() => <Hello name="๊ฐ๋ฆฌ" />} /> <Route path="/time" component={Time} /> <Route path="/resume" children={ResumeRouter} /> </Switch> </BrowserRouter> ); } export default App;
import React from "react"; import { Route, Switch } from "react-router-dom"; import Resume from "./Resume"; const resumeId = ({ match }) => { console.log(match); return ( <> <div>path : {match.path}</div> </> ); }; const ResumeRouter = () => { return ( <Switch> <Route exact path="/resume/"> <Resume hello="Hello" name="๊ฐ๋ฆฌ" hobby="๊ฒ์" food="๊ณ ๊ธฐ" color="blue" /> </Route> <Route path="/resume/1" component={resumeId}></Route> <Route path="/resume/2" component={resumeId}></Route> <Route path="/resume/3" component={resumeId}></Route> </Switch> ); }; export default ResumeRouter;
ย
์์ ์๋ ResumeRouter์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๋๋ค.
๋ค๋ฅธ ์ ์ Route๊ฐ Route์ ์ฐ๊ฒฐ๋ ์ปดํฌ๋ํธ์ ์๋์ผ๋ก ์ ๋ฌํ๋ ๊ฐ์ธ match ์ฌ์ฉ์ ์ ๋ฌด์
๋๋ค. ์๋ ์ฝ๋์์๋ path๋ฅผ ์ง์ ํ ๋ /resume/ ๋ผ๊ณ ์์ฑํ์ง ์๊ณ props๋ก ์ ๋ฌ๋๋ match ๊ฐ์ ์ฌ์ฉํ์์ต๋๋ค.
import React from "react"; import { Route, Switch } from "react-router-dom"; import Resume from "./Resume"; const resumeId = ({ match }) => { console.log(match); return ( <> <div>path : {match.path}</div> </> ); }; const ResumeRouter = ({ match }) => { console.log("render"); return ( <Switch> {/* <Route exact path="/resume "></Route> */} <Route exact path={match.path} component={resumeId}></Route> <Route path={`${match.path}/1`} component={resumeId}></Route> <Route path={`${match.path}/2`} component={resumeId}></Route> <Route path={`${match.path}/3`} component={resumeId}></Route> </Switch> ); }; export default ResumeRouter;
Route ์ฌ์ฉํ์ฌ ํ์ด์ง ๊ฒฝ๋ก ๋ง๋ค๊ธฐ
- Home Page : /
- Product Detail Page : /products/:id
ex) /products/1 , /products/2, /products/3, /products/4
- Cart Page : /cart
- Coupon Page : /users/coupon
- Question Page : /users/question
- Notice Page : /users/notice
- User Page : /users
ย
์คํํด๋ณด์ธ์!
ย
React Router V6
ย
React Router V4/5
ย
ReactRouter V6๊ฐ ๋๋ฉด์ ๋ฌ๋ผ์ง ๋ฌธ๋ฒ๋ค
๊ณต์๋ฌธ์
ย
- ์ ๋ฐ์ดํธ(๋ฒ์ ๋ช ์ ์ํด์ฃผ์๋ฉด ๋ฒ์ Up ๋ฉ๋๋ค.)
npm install react-router-dom
1. Routes
Switch๋ ์ฌ๋ผ์ง๊ณ Routes๊ฐ Switch๋ฅผ ๋์ฒดํฉ๋๋ค.
ย
๊ธฐ์กด ์ฝ๋
<Switch> <Route path="/" exact component={Home} /> <Route path="/time" component={Time} /> </Switch>
ย
v6์ฝ๋
<Routes> <Route path="/" exact component={Home} /> <Route path="/time" component={Time} /> </Routes>
ย
ย
2. exact๊ฐ ์ฌ๋ผ์ง๋ค
V6๋ถํฐ๋ exact๊ฐ ๊ธฐ๋ณธ์ผ๋ก Route์ ๋์ด์์ด์ ๋ ์ด์ exact props๋ฅผ ์์ฑํ์ง ์์๋ ์ ํํ ๊ฒฝ๋ก๋ก ์ด๋์ด ๊ฐ๋ฅํฉ๋๋ค.
ย
๊ธฐ์กด ์ฝ๋
<Route path="/" exact component={Home} /> <Route path="/time" exact component={Time} />
ย
v6์ฝ๋
<Route path="/" component={Home} /> <Route path="/time" component={Time} />
ย
3. element
Route์ ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฌํ ๋ children์ด๋ component๋ฅผ ์ฌ์ฉํ์์ง๋ง, v6๋ถํฐ๋ element๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค.
Route์ ์ฐ๊ฒฐ๋ ์ปดํฌ๋ํธ์๊ฒ ํ์ํ props๋ฅผ ์ ๋ฌํ ๋๋ ๊ธฐ์กด์ฝ๋์ ๊ฐ์ด ์ ๋ฌํ์ง ์๊ณ ๊ธฐ์กด JSX๋ฌธ๋ฒ์ ์ฌ์ฉํด์ ์ ๋ฌํด์ฃผ๋ฉด ๋ฉ๋๋ค.
๊ธฐ์กด์ฝ๋
<Route path="/" exact component={Home} /> <Route path="/hello" render={() => <Hello name="๊ฐ๋ฆฌ" />} /> <Route path="/time" component={Time} /> <Route path="/resume"> <Resume hello="Hello" name="๊ฐ๋ฆฌ" hobby="๊ฒ์" food="๊ณ ๊ธฐ" color="blue" /> </Route>
ย
v6์ฝ๋
<Route path="/" element={<Home />} /> <Route path="/hello" element={<Hello name="๊ฐ๋ฆฌ" />} /> <Route path="/time" element={<Time />} /> <Route path="/resume" element={ <Resume hello="Hello" name="๊ฐ๋ฆฌ" hobby="๊ฒ์" food="๊ณ ๊ธฐ" color="blue" /> } ></Route>
ย
4. Route์ ๋ถ๋ชจ๋ก Routes
๊ธฐ์กด์ v5์์๋ swtch๋ก Route๋ฅผ ๊ฐ์ธ๋ ๊ฒ์ ์ ํ์ฌํญ์ด์๋ค๋ฉด v6์์ switch์ ๋์ฒด ์ญํ ์ธ Routes๋ ๋ฐ๋์ Route๋ฅผ ๊ฐ์ธ์ผํ๋ฉฐ ๋ฐ๋์ Route๋ Routes์ ์ง์์์์ด์ด์ผ ํฉ๋๋ค.
ย
๊ธฐ์กด์ฝ๋
<Route path="/" exact component={Home} /> <Route path="/hello" exact render={() => <Hello name="๊ฐ๋ฆฌ" />} /> <Route path="/time" exact component={Time} />
ย
v6์ฝ๋
<Routes> <Route path="/" element={<Home />} /> <Route path="/hello" element={<Hello name="๊ฐ๋ฆฌ" />} /> <Route path="/time" element={<Time />} /> </Routes>
ย
5. ์ค์ฒฉ๋ ๋ผ์ฐํฐ
ย
v6์ฝ๋
๋ฐฉ๋ฒ1 /resume/ ๋ค์์ ๋ ์์ธ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ๋ ์๋์ ๊ฐ์ด Route์์ Route ํํ๋ก ์์ฑํ๋ฉด ๋ฉ๋๋ค.
element๋ก ์ ๋ฌ๋๋ ์ปดํฌ๋ํธ์๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ์์ ์ ๊ณตํ๋ <Outlet/> ์ปดํฌ๋ํธ๋ฅผ returnํด์ฃผ์ด์ผ ํฉ๋๋ค.
import React from "react"; import { BrowserRouter, Route, Routes, Link, useParams, Outlet, } from "react-router-dom"; import Resume from "./Components/Resume"; const ResumeId = () => { return ( <> <Outlet /> </> ); }; function App() { return ( <BrowserRouter> <Routes> <Route path="resume/*" element={<ResumeId />}> <Route path="" element={ <Resume hello="Hello" name="๊ฐ๋ฆฌ" hobby="๊ฒ์" food="๊ณ ๊ธฐ" color="blue" /> } ></Route> </Route> </Routes> </BrowserRouter> ); } export default App;
ย
๋ฐฉ๋ฒ2 ์ง์ ๊ธฐ์ฌํด์ค๋๋ค.
const ResumePage = () => { return ( <div> <Routes> <Route path=":id" element={<ResumeId />}></Route> <Route path="/" element={ <Resume hello="Hello" name="๊ฐ๋ฆฌ" hobby="๊ฒ์" food="๊ณ ๊ธฐ" color="blue" /> } ></Route> </Routes> </div> ); }; const ResumeId = () => { const a = useParams(); return ( <> <div>{a.id}</div> </> ); }; function App() { return ( <BrowserRouter> <Link to="" style={{ margin: "0 5px" }}> ํ </Link> <Link to="/time" style={{ margin: "0 5px" }}> ํ์ฌ์๊ฐ </Link> <Link to="/hello" style={{ margin: "0 5px" }}> ์๋ </Link> <Link to="/Resume" style={{ margin: "0 5px" }}> ์๊ฐ </Link> const ResumeId = () => { const a = useParams(); return ( <> <div>{a.id}</div> </> ); }; </BrowserRouter> ); }
ย