๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ผํ๋ชฐ SPA๋ฅผ ๊ตฌํํ๊ธฐ ์ํด, ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ๋ค. ํฉ์ค์ผ๋์ ๊ธ์ ์ฐธ๊ณ ํด ์ด์์ ์ง๊ณ , ์์ ์ ๊ฑฐ์ณค๋ค.
๊ธฐ์กด ์ฝ๋
- constructor: ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ค. ์ฆ ์ด๊ธฐ state/props๋ฅผ ์ค์ ํ๊ณ , template ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ธ ๋งํฌ์ ์ ๋ ๋๋งํ๊ณ , ์ด๋ฒคํธ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ๋ค.
- setup: ์ด๊ธฐ state๋ฅผ ์ค์ ํ๋ค.
- mounted: ํ์ ์ปดํฌ๋ํธ๋ค์ ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ๋ค.
- template: ์ปดํฌ๋ํธ์ state๋ฅผ ๋ฐ์ํ ๋งํฌ์ ์ ๋ฆฌํดํ๋ค.
- render: $target๋ด์ ๋งํฌ์ ์ ๋ ๋๋งํ๋ค. ๊ทธ ๋ค์ mounted ํจ์๋ฅผ ํธ์ถํ๋ค.
- setState: ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ , render ํจ์๋ฅผ ํธ์ถํ๋ค.
mounted ๋ฉ์๋๋ฅผ ์ข ๋ ์์ธํ ์ดํด๋ณด์.
์์๋ก ํฉ์ค์ผ๋์ ๊ธ ์ ์ผ๋ถ ์ฝ๋๋ฅผ ๋ฐ์ทํด์๋ค. mounted๋ ํ์ ์ปดํฌ๋ํธ์ ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ๋๋ฐ, ์ด๋ ์ธ์๋ก $target๊ณผ props๋ฅผ ๋๊ธด๋ค.
template ํจ์๋ฅผ ๋ณด๋ฉด ํ์ ์ปดํฌ๋ํธ๋ค์ ์ปจํ ์ด๋๊ฐ ๋ ๋งํฌ์ ๋ค์ด ์๋ค. ๊ฐ ํ์ ์ปดํฌ๋ํธ์ ๋ง๋ ๋งํฌ์ ์ $target์ผ๋ก ๋๊ธด๋ค. ์ด๊ฒ ๋ฐ๋ก render-mounted ์์๋ก ์คํ๋์ด์ผ ํ๋ ์ด์ ์ด๋ค. ์ปจํ ์ด๋ ์ญํ ์ ํ ๋งํฌ์ ์ด DOM์ ์กด์ฌํด์ผ(render) ํ์ ์ปดํฌ๋ํธ๋ค์ด ํด๋น DOM์ innerHTML๋ก ์์ ์ ๋งํฌ์ ์ ๋ ๋๋งํ ์ ์๋ค.
ํํธ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ค์์ ๊ณผ์ ์ด ๋ฐ์ํ๋ค.
setState โก๏ธ render() ์คํ โก๏ธ mounted() ์คํ
mounted()์์๋ ํ์ ์ปดํฌ๋ํธ๋ค์ ์์ฑ์ ํจ์๊ฐ ํธ์ถ๋๋ค. ์ปดํฌ๋ํธ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋์๊ธฐ ๋๋ฌธ์, ํ์ ์ปดํฌ๋ํธ๋ค์ ์๋ก์ด props๋ฅผ ๋ฐํ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
API ์์ฒญ ์์ ๊ฒฐ์ ํ๊ธฐ
์๋ฒ๋ก๋ถํฐ ๋ฐ์์จ ์ํ ๋ชฉ๋ก์ ๋ ๋๋งํด์ผ ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์์ ๊ฐ์ด ์ ์ํ ์ปดํฌ๋ํธ ๋ผ์ดํ์ฌ์ดํด์์ API ์์ฒญ์ ์ธ์ ์ด๋ค์ ธ์ผ ํ ๊น? ํด๋น ์ง๋ฌธ์ ๋ตํ๊ธฐ ์ํด ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ๋ผ์ดํ์ฌ์ดํด์ ์ฐธ๊ณ ํด๋ณด์๋ค.
- ๋ฆฌ์กํธ๋ก ๊ฐ๋ฐํ์ ๋๋ฅผ ์๊ฐํด๋ณด๋ฉด API ํธ์ถ์ useEffect์์ ํ๋ค. ๋ฐ๋ผ์ ์ปดํฌ๋ํธ์ ์ฌ์ดํด ์ useEffect์ ํด๋นํ๋ ๋ฉ์๋์์ API๋ฅผ ํธ์ถํ๋ฉด ๋ ๊ฒ์ด๋ค.
- ๊ทธ๋ ๋ค๋ฉด useEffect๋ ์ธ์ ์คํ๋๋๊ฐ? useEffect๋ render ์ดํ์ ์คํ๋๋ค. componentDidMount, componentDidUpdate, componentWillUnmount๋ฅผ ํฉ์น ๊ฒ useEffect๋ผ๊ณ ํ ์ ์๋ค.
- (๊ฒฐ๋ก ) ๊ธฐ์กด ์ฝ๋์์ useEffect์ ํด๋นํ๋ mounted ๋ฉ์๋ ๋ด์์ API๋ฅผ ํธ์ถํ์.
- ๋ค๋ง ๊ธฐ์กด ์ฝ๋์์๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค mounted๊ฐ ํธ์ถ๋๋ค. mounted ๋ฉ์๋๊ฐ componentDidMount์ componentDidUpdate๋ฅผ ํฌ๊ดํ๊ณ ์๋ ๋๋. ๋ฐ๋ผ์ updated๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ธฐ๋ก ํ๋ค. ์ด๋ก์จ mounted๋ ์ปดํฌ๋ํธ ์์ฑ ์์ ํ ๋ฒ๋ง ์คํ๋๋ค. ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ mounted ๋์ updated๊ฐ ์คํ๋๋ค.
์์ ํ ์ฝ๋
componentDidMount์ componentDidUpdate๊ฐ ํผ์ฌ๋์ด ์๋ mounted๋ฉ์๋๋ก๋ถํฐ, componentDidUpdate์ ํด๋นํ๋ updated๋ฉ์๋๊ฐ ๋ถ๋ฆฌ๋์๋ค.
API ์์ฒญ์ ๋ค์์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
1. mountedํจ์ ๋ด์์ API ์์ฒญ
2. ์๋ต ๊ฒฐ๊ณผ๋ก setStateํจ์ ํธ์ถ
3. setStateํจ์๋ renderํจ์๋ฅผ ํธ์ถํ๋ค.
4. renderํจ์๋ updatedํจ์๋ฅผ ํธ์ถํ๋ฏ๋ก, ๋ณ๊ฒฝ๋ state๊ฐ์ด ํ์ ์ปดํฌ๋ํธ์๋ ๋ฐ์๋๋ค.