โ CSR ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
- https://reactrouter.com/ ์ ์
- Read the Docs ํด๋ฆญ
- VScode ํฐ๋ฏธ๋์์ ๋ช ๋ น์ด ์ ๋ ฅํ๊ณ ์ค์น
- ์ค์น๊ฐ ์ ์์ ์ผ๋ก ๋ฌ๋์ง ํ์ธํ๊ธฐ ์ํด
package.json
ํ์ผ์์ - ํ์ธํ๊ธฐ
- npm start ๋ก ํ๋ก์ ํธ ์์
โ ํ๋ก์ ํธ์์ ์ง์ Page Routing ์๋ํ๊ธฐ
ํ์ฌ ํด๋ ๊ตฌ์กฐ
โ ๋ธ๋ผ์ฐ์ URL ๊ณผ React App ์ ์ฐ๊ฒฐ
App.js
import './App.css';
import { BrowserRouter } from 'react-router-dom'; // ๋ธ๋ผ์ฐ์ URL ๊ณผ React App ์ ์ฐ๊ฒฐ ํ๋ ๊ธฐ๋ฅ
function App() {
return (
<BrowserRouter> // ์ต์์ ํ๊ทธ๋ก ๊ฐ์ธ๊ธฐ
<div className="App">
<h2>App.js</h2>
</div>
</BrowserRouter>
);
}
export default App;
- ๊ฐ์ธ์ ธ ์๋ ๋ถ๋ถ๋ค์ ๋ธ๋ผ์ฐ์ URL ๊ณผ ๋งคํ ๋ ์ ์์ต๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ง๋ค์ด ๋์ ๋ค๋ฅธ ํ์ด์ง๋ค์ import ํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ URL ์ด ๋ฐ๋๊ฒ ๋๋ฉด ์ด๋ค ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋ง ํด์, ๊ทธ ์ปดํฌ๋ํธ๊ฐ ํ์ด์ง ์ญํ ์ ํ๊ฒ ํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด ๋ฐ๋ ๋ถ๋ถ์
<Routes>
๋ผ๋ ์ปดํฌ๋ํธ๋ก ๊ฐ์ธ์ค๋๋ค. - ๊ทธ ์์
<Route />
์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋๋ฐ URL ๊ฒฝ๋ก์ ์ปดํฌ๋ํธ๋ฅผ ๋งคํ ์์ผ์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
import './App.css';
import { BrowserRouter, Route, Routes } from 'react-router-dom';
import Home from './pages/Home';
import New from './pages/New';
import Edit from './pages/Edit';
import Diary from './pages/Diary';
function App() {
return (
<BrowserRouter>
<div className="App">
<h2>App.js</h2>
<Routes>
// ๊ฒฝ๋ก๊ฐ index ์ผ ๋(path = '/') element = { ์ปดํฌ๋ํธ }
<Route path="/" element={<Home />} />
</Routes>
</div>
</BrowserRouter>
);
}
export default App;
โ ๊ฐ๋ฐ์ ๋๊ตฌ์์ ํ์ธํด๋ณด๋ฉด
Router.Provider
์ปดํฌ๋ํธ ์๋Home
์ปดํฌ๋ํธ๊ฐ ์ ์์ ์ผ๋ก ์ถ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.- ํ์ฌ
<Route path="/" element={<Home />} />
๊ฐ index ๋ฅผ ๊ฐ๋ฅดํค๊ณ ์์ผ๋ฉด,Home
์ปดํฌ๋ํธ๋ฅผ ๋ ๋ํด๋ผ. ๋ผ๊ณ ๋ช ๋ น์ ๋ด๋ ธ๋๋ฐ ํ์ฌ ์น ๋ธ๋ผ์ฐ์ URL ์ด/
์๋ฌด๊ฒ๋ ์๋ ๊ฒ๊ณผ ๋๊ฐ๊ธฐ ๋๋ฌธ์Router.Provider
๊ฐ ์ ๋ฌ๋ฐ์Home
์ปดํฌ๋ํธ๋ฅผ ๋งคํ์์ผ์ ๋ ๋ ํ์ต๋๋ค.
โ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด๋ณด๋ฉด
import './App.css';
import { BrowserRouter, Route, Routes } from 'react-router-dom';
import Home from './pages/Home';
import New from './pages/New';
import Edit from './pages/Edit';
import Diary from './pages/Diary';
function App() {
return (
<BrowserRouter>
<div className="App">
<h2>App.js</h2>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/new" element={<New />} />
</Routes>
</div>
</BrowserRouter>
);
}
export default App;
- ํ์ด์ง๊ฐ ๋ฐ๋์ด๋ App.js ๋ถ๋ถ์ด ๋์ค๋ ์ด์ ๋ ๋ฐ๋ ๋ ๋ณํํ๋ ๋ถ๋ถ์ด
<Routes>
์์ ์์ด์ผ ํ๋๋ฐ<Routes>
๋ฐ๊นฅ์ ์๋ ๋ถ๋ถ์ ๊ทธ๋๋ก ์ ์ง๊ฐ ๋ฉ๋๋ค. - ํ์ด์ง์ ์๊ด์์ด ์ ์ฒด์ ์ผ๋ก ๋ณด์ฌ์ง๋ ์์๋ค์ ์์ฑํด์ผ ํ๋ค๊ณ ํ๋ฉด,
<Routes>
์ปดํฌ๋ํธ ๋ฐ๊นฅ์ผ๋ก ๋นผ์ ์์ฑ์ ํ๋ฉด ์ด๋ค ํ์ด์ง์์๋ ๋ค ๋ํ๋๋ ์์๋ค์ ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
โ Page ์ด๋์ํค๋ ์์ ๋ง๋ค๊ธฐ
- HTML ์์๋ ํ์ด์ง ์ด๋์ ํ ๋
<a>
ํ๊ทธ๋ฅผ ์ฌ์ฉ ํฉ๋๋ค. - ํ์ง๋ง ๋๋ฅด๋ฉด ํ์ด์ง๊ฐ ์๋ก ๊ณ ์นจ์ด ๋๊ณ ์ด ๋ง์, SPA ๊ฐ ์๋๋ผ MPA ์ ํน์ง ์ ๋๋ค.
react-router
๋ฅผ ์ฌ์ฉํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์<a>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
โ CSR ๋ฐฉ์ - Link
<Link to={'๊ฒฝ๋ก์ ๋ฌ'}></Link>
ํ์ฌ ํด๋ ๊ตฌ์กฐ
// RouteTest.js
import { Link } from 'react-router-dom';
const RouteTest = () => {
return (
<>
<Link to={'/'}>Home</Link>
<br />
<Link to={'/diary'}>Diary</Link>
<br />
<Link to={'/new'}>New</Link>
<br />
<Link to={'/edit'}>Edit</Link>
<br />
</>
);
};
export default RouteTest;
โ App.js
import './App.css';
import { BrowserRouter, Route, Routes } from 'react-router-dom';
import RouteTest from './components/RouteTest';
import Home from './pages/Home';
import New from './pages/New';
import Edit from './pages/Edit';
import Diary from './pages/Diary';
function App() {
return (
<BrowserRouter>
<div className="App">
<h2>App.js</h2>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/new" element={<New />} />
<Route path="/edit" element={<Edit />} />
<Route path="/diary" element={<Diary />} />
</Routes>
<RouteTest />
</div>
</BrowserRouter>
);
}
export default App;
- ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง์ด ๋๋ฉด์ ํ์ด์ง๊ฐ ์ด๋ ํ ๊ฑธ ํ์ธ ํ ์ ์์ต๋๋ค.
- ์์ ์์ด์ฝ๋ ๊น๋นก์ด์ง ์์ต๋๋ค.
- ๊ต์ฅํ ๋น ๋ฅธ ํ์ด์ง ์ด๋์ CSR ๋ฐฉ์์ผ๋ก
react-rotuer
๋ฅผ ์ด์ฉํด์ ๊ตฌํ ํ ์ ์์ต๋๋ค.
โ ์ฐธ๊ณ
'๐ Front-End > React.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React - img (0) | 2022.10.25 |
---|---|
React - Router ์์ฉ (0) | 2022.10.24 |
React SPA & CSR (0) | 2022.10.24 |
Context API (0) | 2022.10.24 |
useReducer (0) | 2022.10.24 |