November 26, 2020
React Hooks ์ ๋ํด ๊ณต๋ถํด ๋ณด๋ฉด์ ๋ณต์ต๊ฒธ ๋์ ์ปจํ ์ธ ๋ฅผ ํ ์ ์๋? SPA page ๋ฅผ ๋ง๋ค์ด ๋ณด๋ ค ํ๋ค.
์ ํ๋ธ์ ๋์ค๋ ์ธ๊ตญ ๋ถ์ ๋ชฉ์๋ฆฌ๊ฐ ์ข์์ ์์์ ๋ณด๋ฉด์ ์กฐ๊ธ์ฉ ๋ด๊ฐ ์ดํดํ๋ฉฐ ์ ๋ง์ ๋ง๊ฒ ๋ณํ์ํค๊ณ ์งํ ์ํฌ ๊ฑฐ๋ค.
๊ทธ ์ค ์ค๋์ ํ ์ ๋ํ ์ดํด๋ฅผ ํด๋ณด๊ณ ์ react ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด ๋ณด์๋ค.
๊ทผ๋ฐ ๋จผ์ ๋ฌธ์๋ฅผ ๋ณธ ๊ฒ์ ์๋๊ณ .. ์ผ๋จ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ๋ฐ๋ผ ํด ๋ณธ ํ์,
๊ทธ ๋ค์์ ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋๊น (๋ฌด์กฐ๊ฑด๋ด์ผ๋จ)
https://ko.reactjs.org/docs/hooks-state.html
์์์ฃผ ๋๋์ด ๊ตฟ๊ตฟ์ด๋ค. ์ด๋ฐ ๋ฉ๋ํ ์ ์๋ ๊ฑฐ ๋๋ฌด ์ข๋ค.
์ค๋์ ํ์ด์ง์ navigation bar ๋ถ๋ถ์ ๋ง๋ค์ด ๋ณด์๋ค.
๊ฐ์ฆ์!!
src/ ๋ด์ ํ๋ก์ ํธ ํ์ผ๋ค์ด ์์นํ๊ณ ์๋ค.
src / App.js
src / App.css
src / App.test.js
src / logo.svg
๋ช๊ฐ ๋ ์๊ธด ํ๋๋ฐ ์๋ฌดํผ ํ์์๋ ๊ฑฐ ์ธ๊ทธ๋ฆฌ ์น ์ง์ด๋ค.
App.css ๋ด ์ฝ๋๋ ์น ๋ค ์ง์ด๋ค.
๊ทธ๋ฆฌ๊ณ src/components ์ปดํฌ๋ํธ๋ค์ด ์์นํ๋ ๋๋ ํ ๋ฆฌ (components) ๋ฅผ ๋ง๋ค์ด ์ค๋ค.
์ค๋์ ๋ฏธ์ ์ ๋ค๋น๊ฒ์ด์ ๋ฐ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๊ฑฐ๋๊น ํ์ผ๋ค์ ์์ฑํด ์ค๋ค.
๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ๋๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ๋ฅผ ์ค์นํ๋ค.
์๋ํฌ์ธํธ์ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๊ฒ ํด์ฃผ๋ ๊ฑด๊ฐ ๋ณด๋ค.
npm install react-router-dom
๊ทธ๋ ๊ฒ ์์ํ๊ธฐ ์ํ ์ค๋น๋ฅผ ๋ง์ณค๋ค!
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
ReactDOM.render(<App />, document.getElementById('root'))
๋ธ๋ผ์ฐ ์ ์ App component ๋ฅผ ๋ ๋ ํ๋ ์ญํ ์ ๋งก๊ณ ์์ผ๋ฉฐ ๋ฐ๋ก ์ด index.js ๊ฐ npm start ๋ฅผ ํตํด ์๋ฒ๊ฐ ์คํ๋๋ฉด์ ์ฝ์ด๋ค์ด๋ ํ์ผ์ด๋ค.
index.js ๊ฐ ์คํ์ ๋ด๋นํ๋ค ๋ผ๋ฉด App.js ๋ ์ ์ฒด ์ฑ์ ์ฌ์ฅ๋ถ ์ญํ ์ ํ๋ ๋๋์ด๋ผ ํด์ผ ๋ ๊น?
import React from 'react'
import Navbar from './components/Navbar'
import './App.css'
function App() {
return (
<>
<Navbar />
</>
)
}
export default App
๊ธฐ์กด ์ฝ๋๋ฅผ ์ธ๊ทธ๋ฆฌ ๊ฐ์ ์๊ณ , ๋ฏธ๋ฆฌ ์ ๋นต(?) ์ผ๋ก Navbar ๋ฅผ import ํด์จ๋ค.
๋ง๋ค๋ฉด ๋์ง ๋จธ!
return (
<>
<Navbar />
</>
)
๋ฉ๊ทธ๋ฌ๋ Navbar ์ปดํฌ๋ํธ๋ฅผ ํ๋ ๋ฃ์ด์ฃผ์๋ค.
์ฌ๊ธฐ์ ๊ผญ ๊ตณ์ด div ๋ก ๊ฐ์ธ์ง ์๊ณ <> ๋ก ๊ฐ์ ์๋ ์๋จ ๊ฑฐ๋ฅผ ์๊ฒ ๋์๋ค.
rafc ํค์๋ ์ ์ด๊ฑฐ ๋ฌผ๊ฑด์ด๋ค. rafc ์น๊ณ ์ํฐ ์น๋๊น ์๋์ผ๋ก..
ํจ์ํ ์ปดํฌ๋ํธ ์ฝ๋๊ฐ ๋ฌ์ ๋ง๋ค์ด ์ ธ ๋ฒ๋ฆฐ๋์..
์์ ์ ๊ฐ์ ํ ๊ฑฐ ๊ฐ์๋ฐ ์๋์ด ์๊ธธ๋ ๊ฐ์ ๊ฐ์ ํ๊ณ ์ ๊ณตํด ์ฃผ๋ ์ฝ๋๊ฐ ์๋ค.
Add Your Kit's Code to a Project
<script src="https://kit.fontawesome.com/12345678.js" crossorigin="anonymous"></script>
์ด๊ฑฐ๋ฅผ public/index.html ์ head ๋ด์ ์ฝ์ ํด ์ฃผ๋ฉด ์ด์ ํฐํธ ์ด์ธ ์ ์ธ ์๊ฐ ์๋ค!
์ด์ ๋ก๊ณ ๋ฅผ ๋ฃ์ผ๋ฌ ๊ฐ์.
hook ์ด ๋ญ์ฌ.. ํ๋ฉด์ ์ด๋ฆฌ๋ฅ์ ํ์๋๋ฐ ์.. ์ด๊ฒ๋ ๋ํ ๋ฌผ๊ฑด์ด๋ค..
import React, { useState } from 'react'
// useState Hook์ React์์ ๊ฐ์ ธ์จ๋ค.
import { Link } from 'react-router-dom'
// react-router-dom ์์ Link ๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์จ๋ค.
// <a></a> ํ๊ทธ ๊ฐ์ ์ญํ ์ ํ๋ฉด์ ๊ฒฝ๋ก๋ฅผ ์ค์ ํด ์ฃผ๋ ์ญํ ๊ฐ๋ค!
function Navbar() {
const [click, setClick] = useState(false)
// Destructing Assignment (๊ตฌ์กฐ ๋ถํด ํ ๋น์ ์ฌ์ฉํ๋ค)
// ์ฒซ๋ฒ์งธ click ์ state ๋ณ์์ด๋ค.
// ๋๋ฒ์งธ setClick ์ ํด๋น click ์ํ๋ฅผ ๊ฐฑ์ ํ ์ ์๋ ํจ์์ด๋ค.
// useState ์ ์ธ์๋ก false ๋ฅผ ๋๊ฒจ์ค ๊ฑด click ๋ณ์์ ๊ฐ์ false ๋ก ์ด๊ธฐํํ๊ฑฐ๋ค.
return (
<>
<nav className="navbar">
<div className="navbar-container">
<Link to="/" className="navbar-logo">
Dev.SL2 <i className="fas fa-dove" />
</Link>
</div>
</nav>
</>
)
}
export default Navbar
Link ์ปดํฌ๋ํธ๋ react-router-dom ์์ ๋ถ๋ฌ์๋๋ฐ ์ญํ ์ a ํ๊ทธ ๊ฐ์ ๊ฑฐ๋ผ ๋ณด๋ฉด ๋๋ค.
to ๋ผ๋ props ๋ฅผ ํตํด ์ปดํฌ๋ํธ ๋ด dove ์์ด์ฝ์ ๋๋ ์ ๋ ๋ฃจํธ ๊ฒฝ๋ก๋ก ๋ผ์ฐํ ๋๋ ๊ฑฐ๋ค.
๊ธฐ๊ฐ ๋งฅํ๋ค.
https://ko.reactjs.org/docs/hooks-state.html
์ฃผ์ปค๋ฒ๊ทธ ๋ฝ๋ฝํด์ฃผ๊ณ ์ถ๋ค. ์ ์ฌ์ง์ด ํ๊ธ์ด๋ค..
ํคํค ๋ ์ด์ ๋น๋๊ธฐ์จฉ์ ๋ก๊ณ ๋ก ์ธ๊ฑฐ์ผ~๐
์์ ๋ฒ์จ ๋คํ ๊ธฐ๋ถ์ด์ผ!๐ฅฐ๐ฅฐ
์ผ๋จ ์ค๊ฐ ์ ์ฅ์ฐ.. ์ผ์ผ์ปค๋ฐ..