TIL - 21.07.09 ๐จโ๐ป - React
TIL - 21.07.09 ๐จโ๐ป
React SPA (Single Page Application)
์ฑ๊ธ ํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์
.
ํ ํ์ด์ง์์ ์ง์ง๊ณ ๋ณถ๊ณ ํ๋ ์นํ์ด์ง๋ฅผ ๋ปํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ ๋ฏ ํ๋ค.
์กฐ๊ธ ํ์ด์ ๋งํ๋ฉด ์ค๋ณต๋๋ ์์๊ฐ ๋ค์ ๋ก๋ฉ๋จ์ผ๋ก ์๊ธฐ๋ ํธ๋ํฝ๊ณผ ๋๋ฆฐ ํ์ด์ง ์
๋ฐ์ดํธ ์๋๋ฅผ ์ ๋ณด๊ฐ ์
๋ฐ์ดํธ ๋ ๋ถ๋ถ๋ง ๋ค์ ๋ก๋ฉํ๋ ๊ฒ์ผ๋ก ํด๊ฒฐํ ์น์ฌ์ดํธ๋ ์น ์ดํ๋ฆฌ์ผ์ด์
์ ๋งํ๋ค.
์ฅ์ ์ผ๋ก๋
-
์ ์ฒด ํ์ด์ง๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ๊ฒ์ด ์๋ ๊ฐฑ์ ์ด ํ์ํ ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธ ํ๋ฉด ๋๊ธฐ์ ๋ ๋น ๋ฅธ ๋ฐ์์ฑ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ,
-
์๋ฒ ์ ์ฅ์์๋ ์ ์ฒด ๋ฐ์ดํฐ๊ฐ ์๋ ์ผ๋ถ๋ง ์ ์กํ๋ฏ๋ก ํธ๋ํฝ ๋ถ๋ถ์์ ์ด์ ์ด ์๋ค.
-
๊ทธ๋ก์ธํด ์ต์ข ์ ์ผ๋ก ์น ํ์ด์ง, ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ด์ฉํ๋ ์ ์ ๋ค์๊ฒ ๋ ๋์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ค.
์ฅ์ ์ด ์์ผ๋ฉด ๋จ์ ๋ ์๋ ๋ฒ.
-
๋ฆฌ์กํธ๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ JavaScript ํ์ผ ์์ ์์ด์ ๋น์ฐํ js ํ์ผ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๊ณ ๊ทธ๋ก์ธํด ์ต์ด ์ ๋ฐ์ดํธ์ ์๊ฐ์ด ๋ง์ด ์์๋๋ค.
-
๊ฒ์ ์์ง ์ต์ ํ์ ์ข์ง ์๋ค.
์ด๊ฒ ์ญ์ ๋ฐ์ดํฐ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์ ์ฅ๋์ด์์ด์ ์๊ธฐ๋ ๋จ์ ์ธ๋ฐ, ๊ฒ์ ์์ง์ ๋ณดํต HTML์ ์ ๋ณด๋ฅผ ๊ฒ์ ํ๊ฒ ๋๋๋ฐ SPA๋ ์์ ํ ๊ฒ ์ฒ๋ผ HTML์๋ ๋ณ ์ ๋ณด๊ฐ ์๊ณ jsํ์ผ์ ๋ฐ์ดํฐ๊ฐ ๋ด๊ฒจ์๊ธฐ์ ์ ๋ณด๋ฅผ ์ ๋๋ก ๊ฒ์ํ์ง ๋ชปํ๋ค.
๋ค๋ง ์ต๊ทผ ๊ฒ์์์ง๋ค์ ๊ฐ์ ๋๊ณ , ๋๊ณ ์์ด์ ํด๋น ๋จ์ ์ ์ฌ๋ผ์ง๋ ์ถ์ธ์ด๋ค.
React Router DOM
Routing(๋ผ์ฐํ )์ด๋, ๋ค๋ฅธ ์ฃผ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ณผ์ ์ ๊ฒฝ๋ก์ ๋ฐ๋ผ ๋ณ๊ฒฝํ๋ค๋ ์๋ฏธ์ด๋ค.
๋ฆฌ์กํธ์์ ์ฃผ๋ก ์ฌ์ฉํ๋ React Router DOM์ ์ฃผ์ ์ปดํฌ๋ํธ๋ ์ธ๊ฐ์ง๋ก ๋๋ ์ ์๋๋ฐ,
- ๋ผ์ฐํฐ ์ญํ ์ ํ๋
<BrowserRouter>
์ปดํฌ๋ํธ - ๊ฒฝ๋ก๋ฅผ ๋งค์นญํด์ฃผ๋
<Switch>
์<Route>
์ปดํฌ๋ํธ, - ๊ทธ๋ฆฌ๊ณ ๋งค์นญ๋ ๊ฒฝ๋ก๋ก ํ์ด์ง๋ฅผ ์ฐ๊ฒฐํ๋
<Link>
์ปดํฌ๋ํธ
์ด๋ ๊ฒ ๋๋๋ค.
-
BrowserRouter
๋ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ ์ปดํฌ๋ํธ ์์์์ ๊ฐ์ธ๊ฑฐ๋ ํด๋น ์ปดํฌ๋ํธ ์ต์์์์<BrowserRouter></BrowserRouter>
ํ๊ทธ๋ก ๋๋จธ์ง ํ๊ทธ๋ค์ ๊ฐ์ธ์ค์ผํ๋ค. -
Switch
์ปดํฌ๋ํธ๋ ์ฌ๋ฌRoute
์ปดํฌ๋ํธ๋ฅผ ์ธ์ ๊ทธ ์ค ๊ฒฝ๋ก๊ฐ ์ผ์นํ๋ ๋จ ํ๋์ ๋ผ์ฐํฐ๋ง ๋ ๋๋ง ์์ผ์ค๋ค.
Switch
๋ฅผ ์ฌ์ฉํ์ง ์์ ์๋ ์์ง๋ง ๊ทธ ๊ฒฝ์ฐ ๋งค์นญ๋๋ ๋ชจ๋ ์์๋ฅผ ๋ ๋๋งํ๋ค. -
Route
์ปดํฌ๋ํธ๋path
์์ฑ์ ์ง์ ํด์ ํด๋นpath
์ ์ด๋ค ์ปดํฌ๋ํธ๋ฅผ ์ถ๋ ฅํ ์ง ์ ํด์ฃผ๊ณ ํ์ ํLink
์ปดํฌ๋ํธ๊ฐ ์ ํด์ฃผ๋ URL ๊ฒฝ๋ก๊ฐ ์ผ์นํ ๊ฒฝ์ฐRoute
์ปดํฌ๋ํธ๋ก ์ง์ ํ ์ปดํฌ๋ํธ๊ฐ ํธ์ถ๋๋ค. -
Link
์ปดํฌ๋ํธ๋ ๊ฒฝ๋ก๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํ๋ ์ปดํฌ๋ํธ์ด๋ค.
ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค์ง ์๊ณ ์ฑ์ ์ ์งํ๋ฉฐ HTML5 History API๋ฅผ ์ด์ฉํด ํ์ด์ง ์ฃผ์๋ง ๋ฐ๊พธ์ด ์ค๋ค.
React DOM์ผ๋ก ๋ ๋ํ๋ฉดLink
์ปดํฌ๋ํธ๋DOM
์์a
ํ๊ทธ๊ฐ ๋๋ค.
์ด์ฐจํผ ๋ฐ๋๋ฉด ๋ญํ๋ ค Link๋ฅผ ์ฐ๋์?
a
ํ๊ทธ๋ ํ์ด์ง ์ ํ์ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ์ง๋ง Link
์ปดํฌ๋ํธ๋ ์๋ก๊ณ ์นจ ๋ฐฉ์ง ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์์ด SPA ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
React Router DOM ํ๋ก์ธ์ค ๊ฐ๊ด
import { BrowserRouter, Switch, Route, Link } from 'react-router-dom'; // Home, Page1, Page2 ๋ ์ปดํฌ๋ํธ๋ก ๋ค๋ฅธ jsํ์ผ์ ์์ฑํ๊ณ ์ํฌํธ ๋ฐ์์์ ์จ๋ ๋๋ค. // ์ค์ ๋ก ๊ทธ๋ ๊ฒ ๋ง์ด์ฐ๊ณ // Home, Page1, Page2 ์ด ์ธ ์ปดํฌ๋ํธ๋ฅผ ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ๋ถ๋ฌ์ค๊ณ ์ถ์ผ๋ฉด // ์๋ค๋ export ์์ผ์ฃผ๊ณ ์ฌ์ฉํ ์ปดํฌ๋ํธ์์ import ํด์ฃผ๋ฉด ๋๋ค. const Home = () => { return <h1>Home here!</h1> } const Page1 = () => { return <h1>Page 1 here!</h1> } const Page2 = () => { return <h1>Page 2 here!</h1> } const App = () => { return ( <BrowserRouter> <div> <ul> // ํ๊ธฐ Link ์ปดํฌ๋ํธ์ to ์์ฑ ๊ฐ๊ณผ ์ผ์นํ๋ path ์์ฑ๊ฐ์ ๊ฐ์ง Route ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋๋ค. <li> <Link exact to='/'>Home</Link> </li> <li> <Link to='/1'>Page 1</Link> </li> <li> <Link to='/2'>Page 2</Link> </li> </ul> <h1>Hello!</h1> // Route ๋ค์ ๋ฌถ๋๋ค. <Switch> // exact ์์ฑ์ ์ฌ์ฉํ๋ฉด path ๊ฐ๊ณผ ์ ํํ ์ผ์นํ๋ to ์์ฑ ๊ฐ์ ๊ฐ์ง Link ์ปดํฌ๋ํธ์ ๋งค์นญ๋๋ค. // ์ฌ์ฉํ์ง ์์ผ๋ฉด '/' ๋ค์ด๊ฐ๊ฑฐ ๋ค ์ด ๋ ์์ด๋ ๋งค์นญ๋๋ค. // path ๊ฐ์ด '/'์ธ Route ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ฅ ํ๋จ์ผ๋ก ๋ด๋ฆฌ๋ฉด ์์ด๋ ๋๊ธดํ๋ค. // ๊ทผ๋ฐ ์ด๊ฑฐ ์ฐ๊ณ ์์ฑํ๋๊ฒ ๋ ๋ณด๊ธฐ ํธํ๋ ๊ทธ๋ฅ ์ฐ์. <Route exact path='/'> // Route ์ปดํฌ๋ํธ์ path ์์ฑ์ ์ง์ ํ์ง ์์ผ๋ฉด ๋ชจ๋ / ์ดํ์ ๋ฌด์จ ๋ฌธ์๊ฐ ์๋ // ํด๋น ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ๋๋ค. <Home /> </Route> <Route path='/1'> <Page1 /> </Route> <Route path='/2'> <Page2 /> </Route> </Switch> </div> </BrowserRouter> ) } export default App // default ๋ถ์ผ๋ฉด default ๋ค์์ค๋ ์ปดํฌ๋ํธ ํ๋๋ง export ํ๋๊ฑฐ๊ณ // ๋๊ฐ ์ด์ ์ปดํฌ๋ํธ๋ฅผ ํ js ํ์ผ์์ export ํ๋ ค๋ฉด export { Home, App } // ์ด๋ ๊ฒ ์ค๊ดํธ์จ์ export ํด์ฃผ๋ฉด ๋๋ค. export default function ComponetName() { return } // ์ด๋ฐ ์์ผ๋ก ํ๋ฒ์ ์ณ๋ด๊ธฐ๋ ํ๋๋ฐ // ํ์ดํ ํจ์์ ์ฐ๋ฉด defalut ์ฐ๋ฉด์ export ๋ชฌํ๋ค. // defalut ๋นผ๊ณ ์ ์ธํ๊ณ export ํด์ผํจ.
์ด๋ฒคํธ ์ฒ๋ฆฌ
๊ฐ์งํ๋ ์ด๋ฒคํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ผ๋ฉฐ, ์ฌ์ฉ๋ฒ์ ๋๊ฐ์ง๊ฐ ์๋ค.
- exportํ ํจ์ ๋ด๋ถ return๋ฌธ ๋ฐ์ ํจ์ ๋ง๋ค๊ณ onClick={function}์ผ๋ก ์ฐ๊ฒฐํ๊ธฐ.
- onClick={() => console.log('some action')} ์ ๊ฐ์ด ์์ฑ ๊ฐ์ ์ด๋ฒคํธ๋ก ์คํํ ํจ์ ์ ๋ ฅํ๊ธฐ.
- 1๋ฒ๊ณผ 2๋ฒ์ ํ์ด๋ธ๋ฆฌ๋๋ก ํจ์๋ฐ๋ก ๋ง๋ค๊ณ ์์ฑ ๊ฐ์ ์ฐ๊ฒฐํ ๋ค ์ธ์๋ง ๋๊ฒจ์ฃผ๊ธฐ.
// 1๋ฒ export default function App() { const func = () => { console.log('It\'s Working!') } return <button onClick={func}> Hello! </button> } // 2๋ฒ export default function App() { return <button onClick={() => console.log('It\'s Working!')}> Hello! </button> } // 3๋ฒ export default function App() { const func = () => { console.log('It\'s Working!') } return <button onClick={() => func()}> Hello! </button> } // 3๋ฒ์ onClick ๋ณด๋จ onKeyup์ด๋ onChange ๊ฐ์๊ฑธ๋ก ํ ์คํธ ๋ฐ์ค ๊ฐ ๊ฐ์ ธ์ฌ๋ ์ ์ฉํ๋ค.
state, useState ๊ฐ๊ด
useState
๋ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ์์ฉํ๋ค.- ์ฌ์ฉ์
import { useState } from 'react'
๋ก useState ํ์ฑํ์์ผ์ค๋ค. - ๋๋ต์ ์ธ ๋ฌธ๋ฒ์
const [state, setState] = useState(default)
์ด๋ค. - 0๋ฒ ์ธ๋ฑ์ค๋
state
, ๋ณ์ ์๋ฆฌ์ด๊ณ 1๋ฒ ์ธ๋ฑ์ค๋ state๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์,setState
์ด๋ค. setState
๋ ๋ฐํ ๊ฐ์ state์ ํ ๋นํ๋ ํจ์์ด๋ค.state
๋ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฌ๊ฐ ์ฐ๋๋ผ๋ ๊ฐ์ด ๊ฐ๊ฐ ์ ์ฅ๋๋ค.๊ทธ๋ ์ ์ธ๊ฐ
props (property) ๊ฐ๊ด
-
props๋ ์ปดํฌ๋ํธ๋ฅผ ํธ์ถํ ๋ ํธ์ถํ๋ ํ๊ทธ ์์ ํ๋กํผํฐํค์ ๊ฐ์ ์ ๋ ฅํจ์ผ๋ก์จ ํธ์ถํ๋ ์ปดํฌ๋ํธ ์์ผ๋ก ํด๋น ํ๋กํผํฐ ํค์ ๊ฐ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
-
<App key={value} />
์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ฉฐ ๊ฐ์ ๋ฐ์ ํด๋น ์ปดํฌ๋ํธ์ ๋งค๊ฐ๋ณ์ ์๋ฆฌ์ ํ ๋น ๋ฐ์ ๋ฌธ์๋ฅผ ์ ์ผ๋ฉด ํด๋น ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๊ฐ๋ฅํ ๊ฐ์ฒด ํํ๋ก ๋ฐ๋๋ค. -
๋งค๊ฐ๋ณ์๋ ์ฃผ๋ก props๋ฅผ ์ด์ฉํ๋ค.
-
props์ ๊ฐ์ ๋ฐ์ ์ปดํฌ๋ํธ์์ ์์ ํ ์ ์๋ค.
GOOD ๐
๋ฆฌ์กํธ ๋ผ์ฐํฐ, ์คํ
์ดํธ, ํ๋กญ์ค, ์ด๋ฒคํธ ์ฐ๋ ๋ฒ์ ๋๋ต ์ตํ๋ค.
๋ฆฌ์กํธ๋ ์กฐ๊ธ ์นํด์ง ๋๋์ด๋ค.
BAD ๐ฅ
์ด๋ ค์
TO DO ๐ฅ
์ฃผ๋ง์ ํ ๊ฒ!
- React
- ๋ ธ๋ง๋์ฝ๋ ๋ฆฌ์กํธ ํด๋ก ์ฝ๋ฉ
- ์ํ์ฝ๋ฉ ๋ฆฌ์กํธ ๋ถ๋ถ
- ์ฝ๋ฉ์๋ง๋ ๊ฐ์ข ๋ชจ๋ ๋ณด๊ธฐ
- ์๊ณ ๋ฆฌ์ฆ 15 ~ 20
Retrospect ๐ง
์ฝ๋ฆฐ์ด ์
์ฅ์์ ๋ด๋ ๋ญ๊ฐ ๋ญ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋์ถฉ ํ์
ํ ์ ์๊ฒ ํด์ฃผ๊ณ
๋ฐ์ดํฐ๋ ํ์ผ ์์์ ๊ด๋ฆฌํด์ฃผ๊ณ
๋ชจ๋๋ง๋ฅ ์ฌ๊ธฐ ์ ๊ธฐ ์ธ ์ ์๊ณ
.
.
.
๋ฆฌ์กํธ๋ ์ ์ธ๊ฐ?
Reference ๐
์ฝ๋ฉ์๋ง๋ ์ ํ๋ธ - https://www.youtube.com/channel/UCxft4RZ8lrK_BdPNz8NOP7Q
https://developer.mozilla.org/
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(TIL - 21.07.09 ๐จโ๐ป - React), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@planethoon/TIL-21.07.09์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค