โ ์ ํต์ ์ผ๋ก ํ์ด์ง ์ด๋ ์ ๋ธ๋ฌ์ฐ์ ๊ฐ ๋งค๋ฒ HTMLํ์ผ๋ก ๋ ํ์ด์ง ์ ์ฒด ๋ฅผ ๊ฐ์ ธ์์ผ ํ์.
โก๏ธ ์ค๋ณต๋๋ ์์๋ค์ ๋งค๋ฒ ๋ถ๋ฌ์ ์๋ฒ์์ ๋ถํ์ํ ํธ๋ํฝ ๋ฐ์
โก๏ธ ๋๋ฆฐ ๋ฐ์์ฑ , ์ฌ์ฉ์ ๊ฒฝํ ์ ํ
โก๏ธ ๋น ๋ฅธ ์ฌ์ฉ์์์ Interaction
โก๏ธ ์๋ฒ์์๋ ์์ฒญ ๋ฐ์ ๋ฐ์ดํฐ๋ง ๋๊ฒจ์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์๋ฒ ๊ณผ๋ถํ ๋ฌธ์ ํ์ ํ ๊ฐ์
โก๏ธ ์ ์ฒด ํ์ด์ง๋ฅผ ๋ ๋๋ง ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ ๋์ ์ ์ ๊ฒฝํ
โก๏ธ ์ฒซ ๋ก๋ฉ ์ HTML ํ์ผ์ ์ฝ์ด๋ค์ธ ํ ๊ทธ ์ script ์์ ์์ JavaScript ๋ฐ์์ค๋ ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ JavaScript ํ์ผ์ ํฌ๊ธฐ๊ฐ ํฌ๊ณ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ผ๋ก ์ฒซ ํ๋ฉด์ ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง
โก๏ธ ์ข์ง ์์ ๊ฒ์ ์์ง ์ต์ ํ ( ๊ฒ์ ์์ง์ ๊ฒ์ ๋ก๋ด์ด ์น ํ์ด์ง HTML ์ ์๋ ์ ๋ณด๋ฅผ ์์ง, ๋ถ์ํด์ ๊ทธ ๊ฒฐ๊ณผ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๊ณ ๋ณด๊ดํด์๋ค๊ฐ ์ฌ์ฉ์๊ฐ ๊ฒ์์ด๋ฅผ ์
๋ ฅ์ ๋ณด๊ดํ๊ณ ์๋ ์ธ๋ฑ์ค์์ ๊ฒ์์ด์ ๊ฐ์ฅ ์ฐ๊ด์ฑ์ด ๋์ ์น ํ์ด์ง๋ค์ ์์๋๋ก ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์. ๊ทธ๋ ์ง๋ง SPA ๋ HTML ์ด ๊ฑฐ์ ๋น์ด์๊ธฐ ๋๋ฌธ์ ๊ฒ์ ๋ก๋ด์ด ์ถฉ๋ถํ ์๋ฃ์์ง์ ํ์ง ๋ชปํ๋ค. )
โ
๋์์ธ์ ๋ค์ด๊ฐ๊ธฐ ์ ๋จ๊ณ๋ก ์ (wire)๋ฅผ ์ด์ฉํด ์ค๊ณฝ์ (frame)์ ์ก๋ ๊ฒ. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋์์ธ ์ปจ์
๊ณผ ์ฌ์ดํธ ๊ธฐ๋ฅ์ ๋ํ ์ดํดํ ์ ์์. (๋ชฉ์
Mockup ์ ํ๋ ์์ ์์ ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋์์ธํ ๊ฒ)
โก๏ธ ๊ฐ๋ฐ ์ ์ปดํฌ๋ํธ๋ผ๋ฆฌ์ ์ ๊ธฐ์ ์ธ ๊ธฐ๋ฅ์ ์ค๊ณํ๊ธฐ ์ํด ํ์ํ ์ปดํฌ๋ํธ์ ์ ์ฒด UI ๋ฅผ ๊ตฌ์ํ๋๋ฐ ํฐ ํ
โ
SPA๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์ฌ๋ฌ ํ๋ฉด์ด ๊ตฌ์ฑ๋์ด ์๊ณ , ๊ฐ๊ฐ์ ํ๋ฉด์ ์ฃผ์๋ฅผ ๊ฐ์ง๋ค. ์ด๋ ๊ฒ ๋ค๋ฅธ ์ฃผ์/๊ฒฝ๋ก/๋ผ์ฐํ
์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ๋ ๋ผ์ฐํ
(Routing) ์ ์ํด React Router ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
npm install react-router-dom
: react router dom ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ฒฝ๋ก๋ง๋ค ํ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋๋ฐ ๋์์ ์ฃผ๊ฒ ๋๋ค.
router | route matchers | route changers |
---|---|---|
<BrowerRouter> | <Routes> , <Route> | <Link> |
History AP๋ฅผ ์ฌ์ฉํ์ฌ UI๋ฅผ URL๊ณผ ๋๊ธฐํ๋ ์ํ๋ฅผ ์ ์งํด์ฃผ๋ ์ญํ | Routes : Route๋ก ์์ฑ๋ ์์ ์ปดํฌ๋ํธ ์ค์์ ๋งค์นญ๋๋ ์ฒซ๋ฒ์งธ Route ๋ฅผ ๋ ๋๋งํ๋ ์ญํ / Route : ๊ฒฝ๋ก๋ฅผ ์ง์ | ์ฌ์ฉ์๋ฅผ ์ํ๋ ๊ฒฝ๋ก๋ก ์ด๋์์ผ์ฃผ๋ ์ญํ |
// simpleroute ํด๋์ React app ์ค์น
npm create-react-app simpleroute
cd simpleroute
// react-router ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
npm install react-router-dom@^6.3.0
//APP.js ๋ก react-router ์ปดํฌ๋ํธ ๊บผ๋ด์ค๊ธฐ
import React from "react";
import {BrowserRouter, Routes, Route, Link} from "react-router-dom";
export default function App(){
return (
<div>
<BrowserRouter>
<Routes>
<Route path="/" elements={<Home />}></Route>
<Routes>
</BrowserRouter>
</div>
);
};
//Home.js
function Home() {
return(
<div>
<Link to="/"> </Link>
</div>
);
};
<Route>
์ปดํฌ๋ํธ๋ <Routes>
์ ์์ ์ปดํฌ๋ํธ๊ฐ ๋์ด์ผ ํ๋ค.<Link>
์ปดํฌ๋ํธ๋ฅผ ํด๋ฆญํ๋ฉด <Link>
์ to
์์ฑ๊ณผ <Route>
์ปดํฌ๋ํธ์ path
์์ฑ๊ณผ ์ผ์นํ๋ ํ์ด์ง๋ก ์ด๋ํ๋ค. (๊ณ ๋ก ๋์ ์์ฑ๊ฐ์ ์ผ์น์์ผ์ฃผ์ด์ผ ํ๋ค.)<Route>
์ path="*"
๋ก ์ค์ ํ๋ฉด ์ ์ํ์ง ์์ ๊ฒฝ๋ก๋ฅผ ํธ๋ค๋งํ ์ ์๋ค.ํน์ ํ๋ ์ํ์ ํด๋น ์ฃผ์ ํ์ด์ง, ์ด์ ํ์ด์ง, ๋ค์ํ์ด์ง๋ก ์ด๋ํ ์ ์๊ฒ ํ๋ค.
useNavigate
๋ฅผ ์ฌ์ฉํด์ผํ๋ฏ๋ก
import {useNavigate} from "react-router-dom";
function Redirect() {
let navigate = useNavigate();
function handleClick() {
navigate('/home');// /home url ๋ก ์ด๋
navigate(-1);// ์ด์ ํ์ด์ง๋ก ์ด๋
navigate(1); // ๋ค์ ํ์ด์ง๋ก ์ด๋
}
return (
<div>
<button onClick={handleClick}>go home</button>
</div>
);
}