- 3์ฅ. ๋ฆฌ์กํธ ๊ธฐ์ด ๊ฐ๋ ์์๋ณด๊ธฐ
- 4์ฅ. ์ํผ ๋๋ํ๊ฒ ์ปดํฌ๋ํธ ๋ง๋ค๊ธฐ
- 5์ฅ. state์ ํด๋์คํ ์ปดํฌ๋ํธ
- 6์ฅ. ์ํ ์ฑ ๋ง๋ค๊ธฐ
- 7์ฅ. ์ํ ์ฑ ๋ค๋ฌ๊ธฐ
- 8์ฅ. ์ํ ์ฑ์ ์ฌ๋ฌ ๊ธฐ๋ฅ ์ถ๊ฐํ๊ธฐ
- Appendix. GitHub์ ๋ฐฐํฌํ๊ธฐ
- ๋ฆฌ์กํธ๋
src
ํด๋ ์์ ์๋ ์ฝ๋๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผํ ๊ฒฐ๊ณผ๋ฌผ์index.html
์ ๋ ๋๋งํ๋ค. ReactDOM.Render()
์ ์ฒซ ๋ฒ์งธ ์ธ์๋ ์ปดํฌ๋ํธ(Component), ๋ ๋ฒ์งธ ์ธ์๋ ๋ ๋๋งํ ์์น์ด๋ค.- ๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ์ ํจ๊ป ๋์ํ๊ณ ๋ฆฌ์กํธ ์ฑ์ ๋ชจ๋ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋๋ค.
- JSX๋ HTML๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์กฐํฉํ ๋ฌธ๋ฒ์ด๋ค. ์ด ๋ฌธ๋ฒ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ๋ค. ์ด ๋ ์ปดํฌ๋ํธ์ ์ด๋ฆ์ ๋๋ฌธ์์ฌ์ผ ํ๋ค.
- ๋ฆฌ์กํธ๋ ์ต์ข ์ผ๋ก ๋จ ํ ๊ฐ์ ์ปดํฌ๋ํธ๋ง ๋ ๋๋งํ๋ค. (์ปดํฌ๋ํธ๋ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ์ ๋ฐ์ ์๋ค.)
- props๋ ์ปดํฌ๋ํธ๋ก ๋์ด๊ฐ๋ ๋งค๊ฐ๋ณ์์ด๋ค. ๋ฌธ์์ด์ธ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋
{}
๋ก ๊ฐ์ธ์ฃผ์ด์ผ ํ๋ค.
arr.map(func)
๋ arr์ ์์๋ฅผ func์ ๋ฃ์ด ๊ทธ ๋ฐํ๊ฐ์ ๋ชจ์ ๋ฐฐ์ด ํํ๋ก ๋ฐํํ๋ค.- ๋ฆฌ์กํธ์ ์ปดํฌ๋ํธ๋ ์ ์ผํ
key
prop๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค. (๊ฐ์ ์ปดํฌ๋ํธ ์ฌ๋ฌ๊ฐ์ ์ปดํฌ๋ํธ) ์๋ํ๋ฉด ๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ๊ฐ ์๋ก ๋ค๋ฅด๋ค๋ ๊ฒ์ ์ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. - ์ด ๋,
key
props๋ ๋ฆฌ์กํธ ๋ด๋ถ์์ ์ฌ์ฉ๋๋ ํน์ํ props๋ก ์ปดํฌ๋ํธ๋ก ์ง์ ์ ๋ฌ๋์ง ์๋๋ค. - prop-types๋ ์ปดํฌ๋ํธ๊ฐ ์ ๋ฌ๋ฐ์ props๊ฐ ์ ๋ง ๋ด๊ฐ ์ํ๋ ๊ฐ์ธ์ง ํ์ธํด์ค๋ค.
- state๋ ํด๋์คํ ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๋๋ฉฐ, ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ๋ค.
- ํด๋์คํ ์ปดํฌ๋ํธ๊ฐ ๋๋ ค๋ฉด
React.Component
๋ฅผ ์์๋ฐ์์ผ ํ๋ค. - ํจ์ํ ์ปดํฌ๋ํธ๋
return
์ผ๋ก, ํด๋์คํ ์ปดํฌ๋ํธ๋render()
ํจ์๊ฐ JSX๋ฅผ ๋ฐํํ๋ค. ์ด ๋ ๋ฆฌ์กํธ๋ ํด๋์คํ ์ปดํฌ๋ํธ์render()
ํจ์๋ฅผ ์๋์ผ๋ก ์คํ์ํจ๋ค. - state์ ๊ฐ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด์๋
setState()
๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ์ฆ, ์ง์ ๋ณ๊ฒฝํ ์ ์๋ค. - ์ปดํฌ๋ํธ์ ์๋ช
์ฃผ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
constructor()
ํจ์๋ฅผ ํธ์ถํด ๊ฐ์ฒด(์ปดํฌ๋ํธ)๊ฐ ์์ฑ๋๋ค.render()
ํจ์๋ฅผ ํธ์ถํด JSX๋ฅผ ํ๋ฉด์ ๋ ๋๋งํ๋ค.- ๋ ๋๋ง์ด ๋๋๊ณ
componentDidMount()
๋ฅผ ํธ์ถํ๋ค. - ๋ง์ฝ state์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค๋ฉด ์ฆ,
setState()
ํจ์๊ฐ ์คํ๋๋ค๋ฉดcomponentDidUpdate()
๋ฅผ ํธ์ถํ๋ค. - ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ๋ ๋๋ฉด
componentWillUnmount()
ํจ์๊ฐ ํธ์ถ๋๋ค.
fetch
๋์ axios๋ฅผ ์ฌ์ฉํ์ฌ API๋ฅผ ํธ์ถํ๋ค.fetch
๋ ์๋ฒ์ ๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋ด๊ณ ์ ๋ณด๋ฅผ ๋ฐ์์ค๋ ์ผ์ ํ๋ค. ์์ธํ ๊ฑด ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ fetch ๋ฌธ์ ์ฐธ์กฐ- axios๋ Node.js๋ฅผ ์ํ HTTP ๋น๋๊ธฐ ํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
axios.get()
ํจ์์ URL์ ์ ๋ฌํ์ฌ API๋ฅผ ํธ์ถํ ์ ์๋ค.- axios๋ ๋คํธ์ํฌ๋ฅผ ์ด์ฉํ๊ธฐ์ ์ ๋ณด๋ฅผ ๋ค ๋ฐ๊ธฐ๊น์ง ๊ธฐ๋ค๋ ค์ผํ๋ค. ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด
async
์await
๋ฅผ ์ฌ์ฉํ๋ค.async
๋ ํจ์ ์์ ๋ถ์ฌ์ ์๋ฐ์คํฌ๋ฆฝํธ์๊ฒ ์ด ํจ์๊ฐ ๋น๋๊ธฐ ํจ์์์ ์๋ ค์ค๋ค.await
๋ ํจ์ ๋ด์ ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์๋ ๋ถ๋ถ์ ๋ถ์ฌ์ ํด๋น ์ค์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
- state๊ฐ ํ์ํ์ง ์์ผ๋ฉด ํจ์ํ ์ปดํฌ๋ํธ๋ก, state๊ฐ ํ์ํ๋ฉด ํด๋์คํ ์ปดํฌ๋ํธ๋ก ์์ฑํ๋ค.
- API์ ๊ตฌํ๋ ๊ธฐ๋ฅ์ ์ ํ์ฉํ์. ์๋ฅผ ๋ค๋ฉด, ์ด๋ค ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ ๊ฒ.
- ๋ฆฌ์กํธ์์ class ์์ฑ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ className์ ์จ์ผํ๋ค. ๋์ค์ ๋ฆฌ์กํธ๊ฐ JSX๋ฅผ HTML๋ก ๋ณํํ ๋ ์ด className์ class๋ก ๋ฐ๊พธ๊ธฐ ๋๋ฌธ.
map()
ํจ์์ ์ ๋ฌํ ํจ์์ 2๋ฒ์งธ ์ธ์์๋map()
ํจ์๊ฐ ๋ฐ๋ณต ์คํํ๋ฉฐ ๋ฐํํ ๋ฐฐ์ด ์์์ ์ธ๋ฑ์ค๊ฐ ์๋์ผ๋ก ๋ค์ด๊ฐ๋ค.slice(start, end)
๋ก start๋ถํฐ end-1๊น์ง ๋ฌธ์์ด์ ์๋ฅผ ์ ์๋ค.
- ๋ผ์ฐํฐ๋ URL์ ๋ง๊ฒ ํ๋ฉด ์ด๋์ ์์ผ์ฃผ๋ ์ฅ์น์ด๋ค. ์ด๋ฅผ react-router-dom ํจํค์ง๋ก ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
- Route์ URL์ ์ํ path props์ URL์ ๋ง๋ component props๋ฅผ ์ ๋ฌํ ์ ์๋ค. ์ฆ, URL์ ๋ณด๊ณ ๊ทธ์ ๋ง๋ ์ปดํฌ๋ํธ๋ฅผ ํ๋ฉด์ ๊ทธ๋ฆฐ๋ค.
- ๋ผ์ฐํฐ๋ ๊ฐ์ฅ ์์์ ์๋๋ก ๋ด๋ ค๊ฐ๋ฉด์ path props๊ฐ ์๋์ง ์ฐพ๋๋ค.
- ์๋ฅผ ๋ค์ด
/about/cs
์ ์ ์ํ๋ฉด, ๊ฐ์ฅ ์์ path์ธ/
๋ถํฐ/about
,/about/cs
์์ผ๋ก path props๋ฅผ ์ฐพ๋๋ค. - ์ด ๋์ component props๋ฅผ ํด๋น ์์ผ๋ก ๋ ๋๋งํ๊ฒ ๋๋ค.
- ์๋ฅผ ๋ค์ด
- ์์ ๋ฌธ์ ๋ฅผ ๊ณ ์น๊ณ ์ถ๋ค๋ฉด exact props๋ฅผ
true
๋ก ํ์ฌ path props์ ์ ํํ ์ผ์นํ๋ URL์๋ง ๋ฐ์ํ๋๋ก ํ๋ค. <a>
์ href ์์ฑ์ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๊ธฐ ๋๋ฌธ์<Link>
์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ด์ง ์ ์ฒด๊ฐ ์๋ก ๊ณ ์นจ๋์ง ์๋๋ค.<Link>
์<Route>
์ปดํฌ๋ํธ๋ ๋ฌด์กฐ๊ฑด<HashRouter>
์ปดํฌ๋ํธ ์์ ์์ด์ผ ์๋ํ๋ค.<Link>
์ to ์์ฑ์ ์ฌ์ฉํ์ฌ ์ด๋ค URL๋ก ๊ฐ์ง, ๊ทธ ๋ ๊ทธ๋ ค์ง๋ ์ปดํฌ๋ํธ์ ์ด๋ค props๋ฅผ ๋๊ฒจ์ค์ง๋ฅผ ์ ํ ์ ์๋ค.
- route props๋ ๋ผ์ฐํ
๋์์ด ๋๋ ์ปดํฌ๋ํธ์ ๋๊ฒจ์ฃผ๋ ๊ธฐ๋ณธ props๋ฅผ ๋งํ๋ค.
- route props์
history
์์๋ push, go, goBack, goForward์ ๊ฐ์ด URL์ ๋ณ๊ฒฝํด์ฃผ๋ ํจ์๋ค์ด ๋ค์ด์๋ค. push
๋ ์ง์ ๋ URL๋ก ์ด๋์ ์์ผ์ค๋ค.
- route props์
package.json
์ hompage ํค์ ํค๊ฐ์ browerlist ์๋์ ์ถ๊ฐํ๋ค.package.json
์ scripts ํค๊ฐ์ ๋ค์์ ์ถ๊ฐํ๋ค.
{
scripts: {
...
"predeploy": "npm run build",
"deploy": "gh-pages -d build",
}
}
- GitHub์ ์ฝ๋๋ฅผ ์ ๋ก๋ํ๊ณ gh-pages ํจํค์ง๋ฅผ ์ค์นํ๋ค.
npm run deploy
๋ฅผ ์ ๋ ฅํ์ฌ ์ฌ์ดํธ๋ฅผ ๋ฐฐํฌํ๋ค.