๐ค ์์งlog ๐ค
[REACT] ํ๋ก ํธ์๋ ๊ธฐ์ ๋ฉด์ ๊ฐ๋ ์ ๋ฆฌ ๋ณธ๋ฌธ
๐ React
: ๋ฆฌ์กํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋๋ก์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ์ํด ์ฌ์ฉํ๋ ์น ํ๋ ์ ์ํฌ ์ด๋ค.
๐๏ธ React์ ์๋ฆฌ, ํน์ง, ์ฅ๋จ์
: ๋ฆฌ์กํธ๋ ๋ฐ์ดํฐ์ ํ๋ฆ์ด ํ๋ฐฉํฅ์ผ๋ก๋ง ํ๋ฅด๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ฐ์ง๊ณ ์๋ค.
- UI๋ฅผ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ก ์ชผ๊ฐ์ ๋ง๋ ๋ค. ์ ์ฒด ์ฝ๋๋ฅผ ํ์ ํ๊ธฐ ์ฌ์ฐ๋ฉฐ ์ ์ง๋ณด์ ๋ฐ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๊ณ , ์ฌ์ฌ์ฉ์ฑ์ด ๋๋ค.
- ๋ฆฌ์กํธ๋ฅผ ์ด์ฉํ๋ฉด ๋์ ์ธ UI๋ฅผ ์ฝ๊ฒ ๋ง๋ค์ ์๋ค.
๐๏ธ Javascript + XML
- ์๋ฐ์คํฌ๋ฆฝํธ์ HTML ํ๊ทธ๋ฅผ ๋ผ์น์ ๋ฌธ๋ฒ
HTML ํ๊ทธ ์์์ ์ค๊ดํธ {}๋ฅผ ์ฌ์ฉํด์ JS๋ฅผ ์ธ ์ ์๋ค.
const apple = "์ฌ๊ณผ"
const title = <h1>{apple} ๋์ค๋ถ?</h1>
๐๏ธ Component
- ํ๋ฉด์ ์ด๋ฃจ๋ '์์'๋ก ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ UI ์ฝ๋ ์กฐ๊ฐ์ด๋ค.
- ๊ฐ๋ฐํ๋ค๊ฐ ํน์ ๋ถ๋ถ์์ ๋ฒ๊ทธ๊ฐ ์ผ์ด๋๋ฉด ๊ทธ ์ปดํฌ๋ํธ๋ง ์์ ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ์ฆ๊ฐ์์ผ์ค๋ค. - ๋ฆฌ์กํธ ๋ฐ์ดํฐ์ ํ๋ฆ์ ๋จ๋ฐฉํฅ์ผ๋ก ์ด๋ค์ง๋ค. ์ฆ, ๋ถ๋ชจ์์ ์์์ผ๋ก ํ๋ฐฉํฅ์ผ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ props๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต์ ํด์ค ์ ์๋ค.
Props
- ํ๋กํผํฐ์ ์ค์๋ง์ด๊ณ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ -> ์์ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ฃผ๋ ๊ฐ๋ ์ด๋ค.
- ์์ ์ปดํฌ๋ํธ์์ ์ ๋ฌ ๋ฐ์ props๋ ์ฝ๊ธฐ ์ ์ฉ์ด๊ณ Props๋ฅผ ์ ๋ฌํด์ค ์ต์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ง props๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
State
- ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ๋ํ๋ด๊ณ ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ๋ค.
- useState ํจ์๋ก ์ํ๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
- const [์ํ๋ช , ์ํ๋ณ๊ฒฝํจ์๋ช ] = useState(์ด๊ธฐ๊ฐ);
๐ก Props์ State์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
: props๋ ๋ฐ์ ๋ฐ์ดํฐ ์ด๊ฑฐ๋ ์์ฑ๋ ๋ฐ์ดํฐ, ์ฆ ๋ฐ์ดํฐ์ ๊ธฐ์์ด ์๊ธฐ ์์ ์ด ์๋ ๊ฒ์ด๊ณ , state๋ ์๊ธฐ์์ ์ ์ปดํฌ๋ํธ์์ ๋ง๋ค์ด๋ธ ๋ฐ์ดํฐ
๐ก ์ state๋ฅผ ์ง์ ๋ฐ๊พธ์ง ์๊ณ setState (useState)๋ฅผ ์ฌ์ฉํด์ผ ํ๋์?
: ์ง์ state๋ฅผ ์์ ํ๋ฉด ๋ฆฌ์กํธ๋ render ํจ์๋ฅผ ํธ์ถํ์ง ์์์ ๋ ๋๋ง์ด ์ผ์ด๋์ง ์๊ณ setState๋ฅผ ํธ์ถํ์ฌ state๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋ฆฌ์กํธ ์์ง์ด render ํจ์๋ฅผ ์ด์ฉํด์ ๋ ๋๋ง์ ์คํํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๐๏ธ ๋ผ์ดํ ์ฌ์ดํด ๋ฉ์๋
- ํด๋์คํ ์ปดํฌ๋ํธ์์๋ง ์ฌ์ฉ๋๊ณ , ์ปดํฌ๋ํธ๊ฐ ๋ธ๋ผ์ฐ์ ์์ ๋ํ๋๊ณ , ์ ๋ฐ์ดํธ ๋๊ณ , ์ฌ๋ผ์ง๊ฒ ๋ ๋ ํธ์ถ๋๋ ๋ฉ์๋๋ค ์ด๋ค.
๐๏ธ SPA (Single Page Application)
์ฌ์ฉ์๊ฐ ํ ํ์ด์ง์ ๋จธ๋ฌด๋ฅด๋ฉด์ ์๋ก์ด ํ์ด์ง๋ก ๋ฐ๋ ๋ ๋ง๋ค ํ์ํ ์ ๋ณด๋ง ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์์(์๋ก๊ณ ์นจ ์์ด) ๋ถ๋ถ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๋ค.
- ์ฒซ ํ๋ฉด ๋ก๋ฉ ์๊ฐ์ด ๋ค์ ๊ธธ๋ค๋ ์ ์ด ์๋ค.
- ๋ผ์ฐํ ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์ฌ์ค ์ ์๋ค.
๐๏ธ Virtual DOM
: ๊ฐ์์ DOM ์ด๋ฉฐ ์ค์ ๋ก ๋ณด์ฌ์ง๋ DOM์ด ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์์ผ๋ก ์กด์ฌํ๋ DOM์ด๋ค.
- ์ํ๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ๊ณณ์ UI๋ฅผ Virtual DOM์ ํตํด์ ๋ ๋๋ง ํ๋ค. ๊ทธ๋ฌ๊ณ ๋์ ์ค์ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ฌ์ง๊ณ ์๋ DOM๊ณผ ๋น๊ตํ ์ฐจ์ด๊ฐ ์๋๊ณณ์ ๊ฐ์งํ์ฌ ์ค์ DOM์ ํจ์น ์์ผ์ค๋ค.
: ๋ณ๊ฒฝ๋ ๊ตฌ์ฑ ์์๊ฐ ๋ฐ๋๋ฉด ์ ์ฒด๊ฐ ๋ ๋๋ง์ด ๋๋๋ฐ ๋งค์ฐ ๋นํจ์จ์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
๊ทธ๋์ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ค ํ๋๊ฐ ๋ฐ๋ก Virtual DOM ์ด๋ค.
Virtual DOM์ ๊ธฐ์กด DOM๊ณผ ๋ณ๊ฒฝ๋ Virtual DOM์ ์ฐจ์ด๋ฅผ ํ๋จํ๊ณ ๋ณ๊ฒฝ๋ ๊ตฌ์ฑ์์๋ง ์ฐพ์ ๊ทธ๋ถ๋ถ๋ง ๋ ๋๋ง์ด ๋๋ค.
๐๏ธ Key Props
: ํ๋์ JSX ํ๊ทธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋๋๋ฐ ์ด ๊ฐ์ฒด์๋ ํด๋น ๊ฐ์ฒด๊ฐ Virtual DOM์ ์์์์ ํ์ธํด์ฃผ๋ ์ฌ๋ณผ๊ฐ๊ณผ ๊ฐ๊ฐ์ Virtual DOM๋ฅผ ๊ณ ์ ํ๊ฒ ๊ตฌ๋ถํ๋ key ๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋๋ค.
๊ทธ๋์ map( ) ์ ์ฌ์ฉํ์ ๋, ํด๋น ๋ฆฌ์คํธ์ ๊ณ ์ ํ key๊ฐ์ ๋ฃ์ด์ค์ผํ๋ค. ๋ฆฌ์กํธ๋ ์ด key๋ค์ ๋น๊ต๋ฅผ ํตํด ๋ฆฌ์คํธ์ ์์๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋์์ ๋ ์ํ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ์งํ๊ณ ๋ฐ์ํ ์ ์๋ค.
์ฝ๊ฒ ๋งํด ์๋ฆฌ๋จผํธ ํน์ ์ปดํฌ๋ํธ์ ๋ณํ๋ฅผ ๊ฐ์งํ๊ธฐ ์ํจ์ด๊ณ ์ด๋ ํจ์จ์ ์ธ DOM ์ฌ์ฉ์ผ๋ก ๊ท๊ฒฐ๋๋ค.
๐๏ธ Hook
: ํจ์ ์ปดํฌ๋ํธ์์ ์ํ ๊ด๋ฆฌ ๋ฐ ์๋ช ์ฃผ๊ธฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฆฌ์กํธ์ ๊ธฐ๋ฅ
๐กํจ์ํ ์ปดํฌ๋ํธ์ ์ฅ์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
: ์งง๊ณ ์ง๊ด์ ์ธ ์ฝ๋๋ฅผ ์งค ์ ์๊ณ , hook์ ์ฌ์ฉํ ์์๋ค๋ ์ ์ด ์ ์ผ ํฐ ์ฅ์ ์ด๋ค.
useState
- ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
์ํ์ ๋ฐ๋ผ ์ฆ๊ฐ์ ์ผ๋ก ๋ค๋ฅธ ํ๋ฉด๋ค์ ์ถ๋ ฅํด์ค๋ค. (= ๋ ๋๋ง)
useEffect
- ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋๋ง๋ค ํน์ ์์ ์ ์คํํ ์ ์๊ฒํ๋ค.
- ์ฌ์ด๋ ์ดํํธ๋ฅผ ๊ฐ์งํ๋ ์ํํ๊ณ ์ ํ๋ ์์ , ๊ฒ์ฌ ๊ฐ์ด ๋ณํ๋ฉด ์ฝ๋ฐฑ์ ์คํํ๋ค.
useEffect(์ํํ๊ณ ์ ํ๋ ์์
ํจ์, [๊ฒ์ฌ ๊ฐ])
componentDidMount: ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ , ์ฒซ ๋ ๋๋ง์ ๋ค ๋ง์น ํ ์คํ.
componentDidUpdate: ๋ฆฌ๋ ๋๋ง์ ์๋ฃํ ํ ์คํ. ์ฆ render()๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ์คํ
compoenntWillUnMount: ์ปดํฌ๋ํธ๋ฅผ DOM์์ ์ ๊ฑฐํ ๋ ์คํ.
- Component๊ฐ Mount ๋์์ ๋(๋ํ๋ ๋) = componentDidMount
- [deps]๋ถ๋ถ์ ์๋ตํ๋ค๋ฉด ํด๋น ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋๋ง๋ค useEffect๊ฐ ์คํ๋๋ค.
useEffect(() => {
console.log("๋ ๋๋ง ๋ ๋๋ง๋ค ์คํ");
});
- ๋ง์ฝ ๋งจ ์ฒ์ ๋ ๋๋ง ๋ ๋ ํ ๋ฒ๋ง ์คํํ๊ณ ์ถ๋ค๋ฉด deps์์น์ ๋น ๋ฐฐ์ด์ ๋ฃ๋๋ค.
useEffect(() => {
console.log("๋งจ ์ฒ์ ๋ ๋๋ง๋ ๋ ํ ๋ฒ๋ง ์คํ");
},[]);
- Component๊ฐ Update ๋์์ ๋(props, state ๋ณ๊ฒฝ) = componentDidUpdate
useEffect(() => {
console.log("name์ด๋ผ๋ ๊ฐ์ด ์
๋ฐ์ดํธ ๋ ๋๋ง ์คํ");
},[name]);
- Component๊ฐ ์ฌ๋ผ์ง ๋ & Update ๋๊ธฐ ์ง์ ์ =compoenntWillUnMount
- ์ธ๋ง์ดํธ ๋ ๋๋ง cleanUp ํจ์๋ฅผ ์คํ์ํค๊ณ ์ถ๋ค๋ฉด deps์ ๋น๋ฐฐ์ด์ ๋ฃ์ผ๋ฉด ๋๋ค.
- ํน์ ๊ฐ์ด ์ ๋ฐ์ดํธ ๋๊ธฐ ์ง์ ์ cleanup ํจ์๋ฅผ ์คํ์ํค๊ณ ์ถ๋ค๋ฉด deps์ ํด๋น ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
useEffect(() => {
console.log("hello");
return () => {
console.log("cleanUp ํจ์");
};
});
๐ฅ ์ ์์ฌํญ
- useEffect๋ ์ฒซ ๋ ๋๋ง ํ ์คํ๋๋ค.
- ์ต์ด์ ํ ๋ฒ์ ๋ฌด์กฐ๊ฑด ์คํ๋๋ค.
useRef
- ์ ์ฅ๊ณต๊ฐ(๋ณ์ ๊ด๋ฆฌ) ๋๋ DOM ์์์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ref(= ์ฐธ์กฐ: reference)
useMemo & useCallback
: useMemo๋ฅผ ํตํด ์บ์ฑ์ ํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์์ ๊บผ๋ด์์ ์ฌ์ฌ์ฉํ๋ค. useMemo์ ์ธ์๋ก ์ฝ๋ฐฑํจ์๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ํจ์๊ฐ ๋ฆฌํดํ๋ ๊ฐ์ ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ ๊ฒ์ด๋ค.
: useCallback์ ์ธ์๋ก ์ ๋ฌํ ์ฝ๋ฐฑ ํจ์ ๊ทธ ์์ฒด๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ ๊ฒ์ด๋ค.
- ์ฃผ๋ก ๋ ๋๋ง ์ฑ๋ฅ์ ์ต์ ํํด์ผ ํ๋ ์ํฉ์ ์ฌ์ฉํ๋ค.
๐๏ธ ์ ์ด ์ปดํฌ๋ํธ vs ๋น์ ์ด ์ปดํฌ๋ํธ
๐ก ์ ์ด ์ปดํฌ๋ํธ์ ๋น์ ์ด ์ปดํฌ๋ํธ์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
: ์ฆ๊ฐ์ ์ผ๋ก, ์ค์๊ฐ์ผ๋ก ๊ฐ์ ๋ํ ํผ๋๋ฐฑ์ด ํ์ํ๋ค > ์ ์ด ์ปดํฌ๋ํธ ์ฌ์ฉ
์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ด ๋ถํ์ํ๊ณ ์ ์ถ์์๋ง ๊ฐ์ด ํ์ํ๋ค, ๋ถํ์ํ ๋ ๋๋ง๊ณผ ๊ฐ ๋๊ธฐํ๊ฐ ์ซ๋ค > ๋น์ ์ด ์ปดํฌ๋ํธ ์ฌ์ฉ
๋ฆฌ์กํธ๋ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก form์ ์
๋ ฅ์ ์ฒ๋ฆฌํ๋ค.
๋ฐ๋ก ์ ์ด ์ปดํฌ๋ํธ์ ๋น์ ์ด ์ปดํฌ๋ํธ๋ก ๋๋ ์ ์๋๋ฐ
๐ฅ (1) ์ ์ด ์ปดํฌ๋ํธ
- ์ฌ์ฉ์๊ฐ ์ ์ด ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ฉด ๋ณ๊ฒฝ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ํธ์ถ๋๊ณ ์ฝ๋๊ฐ ์ ๋ฐ์ดํธ๋ ๊ฐ์ผ๋ก ๋ค์ ๋ ๋๋ง์ด ๋๋ค. ๋ํ์ ์ผ๋ก form์ value ๊ฐ์ useState๋ก ๊ด๋ฆฌํด์ ๋ฐ์ดํฐ๋ฅผ ์ต์ ํ ํ๋ ๊ฒ์ด๋ค.
const [inputValue, setInputValue] = useState('');
return (
<input value={inputValue} onChange={(e) => setInputValue(e.target.value) />
)
์ด๋ฐ์์ผ๋ก ํ ์คํธ ์ ๋ ฅ์ ํ ๋๋ง๋ค onChange์ ์ฝ๋ฐฑ ํธ์ถ์ ๋ฐ๋ผ์ form์ ์ํ๊ฐ ๊ณ์ ์ฆ๊ฐ์ผ๋ก ๋ ๋๋ง ๋๋ ๊ฒ์ ์ ์ด ์ปดํฌ๋ํธ๋ผ๊ณ ํ๋ค.
ํ์ฉ ์)
- form์ ์ ํจ์ฑ ๊ฒ์ฌํ ๋ (์์ด๋๋ ๋น๋ฐ๋ฒํธ ์ฒดํฌ์)
- form์ ๋ฐ์ดํฐ ๊ฐ์ ๋ฐ๋ผ ๋ฒํผ ์ํ๋ฅผ disabled๋ก ํ์
๐ฅ (2) ๋น์ ์ด ์ปดํฌ๋ํธ
- ์ฌ์ฉ์๊ฐ ํผ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ๋ฉด ์
๋ฐ์ดํธ๋ ์ ๋ณด๊ฐ ๋ฆฌ์กํธ์์ ๋ณ๋ ์ฒ๋ฆฌํ ํ์ ์์ด ์๋ฆฌ๋จผํธ์ ๋ฐ์๋๋ค.
์ ์ด ์ปดํฌ๋ํธ๋ useState๋ก ๊ด๋ฆฌํ์ง๋ง ๋น์ ์ด ์ปดํฌ๋ํธ๋ ref๋ก ๊ด๋ฆฌํ๋ค.
const inputRef = useRef();
return (
<input ref={inputRef} value="hello" />
)
์ด์ฒ๋ผ ref๋ฅผ ํ์ฉํด ์ ๋ ฅ ํผ์ ์ํ๋ฅผ ์ ๊ทผํ ์ ์๋ค. button์ ํด๋ฆญํ ๋ ref๋ฅผ ํตํด ๊ฐ์ ์ป์ ์ ์๋ค.
ํ์ฉ ์)
- ๋ถํ์ํ ๋ ๋๋ง์ ์ค์ด๊ณ , ๋ฒํผ์ ํด๋ฆญํ์ฌ ์ ์ถํ ๋ ๊ฐ์ด ํ์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉ
๐ ์ํ ๊ด๋ฆฌ
๐ก React์์ State๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋์?
: ๋ฆฌ์กํธ์ ์ํ๊ด๋ฆฌ๋ฐฉ๋ฒ์ ํฌ๊ฒ 2๊ฐ์ง๋ก ๋๋ฉ๋๋ค. ๋ถ๋ชจ ํน์ ์์ ์ด ์ง์ ์ปดํฌ๋ํธ ์์์ ๊ด๋ฆฌํ๋ ๋ก์ปฌ ์ํ ๋ฐฉ๋ฒ๊ณผ ๋ก์ปฌ ์ํ์ ๋ถํธํจ์ ๊ฐ์ ํ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๐๏ธ ๋ก์ปฌ ์ํ ๊ด๋ฆฌ?
ํจ์ํ ์ปดํฌ๋ํธ์์๋ ๋ฆฌ์กํธ hook ๊ณผ props ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๊ด๋ฆฌ๋ฅผ ํ๋ ๋ฐฉ๋ฒ. ํ์ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด, props๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ํฌ๊ธฐ๊ฐ ์ ์ ์ปค์ง ์๋ก props drilling์ด ์ฆ๊ฐํ์ฌ, ๋ฐ๋ณต์์ ์ด ๋ง์์ง๊ณ ์ ์ง ๋ณด์๊ฐ ์ด๋ ค์์ง๋ ๋จ์ ์ด ์๋ค.
๐๏ธ ์ ์ญ ์ํ ๊ด๋ฆฌ?
์ ์ญ ์ํ๋ ํ๋ก์ ํธ ์ ์ฒด์ ์ํ๊ด๋ฆฌ๋ฅผ ์ด๊ดํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋ํ์ ์ผ๋ก Redux, recoil ๋ฑ์ด ์กด์ฌํ๋ค. ์ ์ญ์์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์, ์ด๋ค ์ปดํฌ๋ํธ์์๋ ์ํ ๊ฐ์ ๋ฐ์ํ๊ณ , ๋ณ๊ฒฝ์ํค๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. props ๊ณผ์ ์ด ์๋ต๋์ด, ์์ ์ด ์ ๊ณ ์ ์ง ๋ณด์๊ฐ ๊ฐํธํด์ง๋ ์ฅ์ ์ด ์์ผ๋, ์ํ๊ด๋ฆฌ ์ค๋ฅ์ ๋ํ๋๋ ์ฌ์ด๋ ์ดํํธ๊ฐ ์ปค์ง๋ ๋จ์ ์ด ์กด์ฌํ๋ค.
๐กProps Drilling์ ๋ํด ์ค๋ช ๊ณผ ํด๊ฒฐ๋ฐฉ๋ฒ์ ๋งํด์ฃผ์ธ์.
: Prop Drilling ์ props๋ฅผ ์ค๋ก์ง ํ์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ๋ ์ฉ๋๋ก๋ง ์ฐ์ด๋ ์ปดํฌ๋ํธ๋ค์ ๊ฑฐ์น๋ฉด์ React Component ํธ๋ฆฌ์ ํ ๋ถ๋ถ์์ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ณผ์ ์ ๋๋ค. ํ์ง๋ง props์ ์ ๋ฌ์ด ๋ง์ด์ง์๋ก ์ฝ๋๋ฅผ ์ฝ์ ๋ ํด๋น prop์ ์ถ์ ํ๊ธฐ ํ๋ค์ด์ง๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์๋ ๋์ฑ ์ด๋ ค์์ง๋๋ค.
๐ฅ ํด๊ฒฐ๋ฐฉ๋ฒ? ์ฒซ ๋ฒ์งธ๋ก ์ ์ญ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ / ๋ ๋ฒ์งธ๋ก๋ children ์ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ
๐๏ธ Redux
: props ์์ด state(์ํ)๋ฅผ ๊ณต์ ํ ์ ์๊ฒ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ - js ํ์ผ ํ๋์ state๋ค์ ๋ณด๊ดํ ์ ์๋ค.
- ์ํ๋ฅผ ์์ธก ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๋ค. (์์ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ)
- ์ ์ง๋ณด์ (๋ณต์กํ ์ํ ๊ด๋ฆฌ์ ๋น๊ต)
- ๋๋ฒ๊น ์ ์ ๋ฆฌ (action๊ณผ state log ๊ธฐ๋ก ์) → redux dev tool (ํฌ๋กฌ ํ์ฅ)
- ํ ์คํธ๋ฅผ ๋ถ์ด๊ธฐ ์ฉ์ (์์ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ)
- flux ์ํคํ
์ฒ๋ฅผ ๋ฐ๋ฅธ๋ค.
๐ฅ flux ๊ตฌ์กฐ๋ ? ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ฐ์ง๋ ๊ตฌ์กฐ.
์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ๋ฉด ์ฒ์๋ถํฐ ๋ค์ ์์๋๋ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋์ด์๋ค. - ๋ฐ์ดํฐ ํ๋ฆ์ dispatch -> store -> view ์์์ด๋ค. view์์ ์ ๋ ฅ์ด ๋ฐ์ํ๋ฉด ์ก์ ์ ํตํด ๋์คํจ์น๋ก ํฅํ๊ฒ ๋๋ค.
๐๏ธ Recoil
: atom(์ํ์ ๋จ์) , selector(ํ์๋ state๋ฅผ ์ ์ฅ)
- ๊ฐ์ฅ ๋ฆฌ์กํธ์ค๋ฝ๋ค. ๋ฆฌ์กํธ hooks์ ๋๋์ผ๋ก ์น์ํ๊ฒ ์์ ํ ์ ์๊ณ , ๋ฌ๋์ปค๋ธ๊ฐ ๋ฎ๋ค.
- ์ด๊ธฐ ์ธํ ์ด ์ ๋ง ๊ฐํธํ๊ณ recoil ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธ์ ๋ฐ๋ก ์ค์นํด์ผ ๋ ๊ฒ๋ค์ด ์์ด์ ์ข๋ค.
- ์ง๊ด์ ์ด๊ณ ๋จ์ํ ํธ์ด๋ค.
- ๋๋ฒ๊น ๋๊ตฌ ์ง์์ด ๋ฏธ๋ฏธํ๋ค.
๐๏ธ React-query
: React Application์์ ์๋ฒ ์ํ๋ฅผ ๋ถ๋ฌ์ค๊ณ , ์บ์ฑํ๋ฉฐ, ์ง์์ ์ผ๋ก ๋๊ธฐํํ๊ณ ์ ๋ฐ์ดํธํ๋ ์์ ์ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๐ฅํต์ฌ ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ ์บ์ฑ์ด๋ค.๐ฅ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์บ์๋ก ์ ์ฅํ์ฌ, ๋์ผํ ์์ฒญ์ด ๋ฐ๋ณต๋์ด๋ ์๋ก์ด ์์ฒญ์ ๋ณด๋ด์ง ์๊ณ ์ ์ฅ๋์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๋คํธ์ํฌ ์ฌ์ฉ๋์ ์ค์ด๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๋ก๋ฉ ๋ฐ ์ค๋ฅ ์ํ ๊ด๋ฆฌ (๋ฐ์ดํฐ๊ฐ ๋ก๋ฉ๋์์ ๋์ ์ค๋ฅ ๋ฐ์์ ์ฌ์ฉ์์๊ฒ ์๋ ค์ค๋ค.)
- ๊ฒ์ํ ๊ฐ์ ๊ฒ์ ๋ง๋ค ๋ Pagination ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ํ๋ฆฌํจ์นญ(Prefetching)์ ์ํํ ์ ์๋ค.
๐ฅ ํ๋ฆฌํจ์นญ(Prefetching)์ด๋ ? ๋ค์ ํ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์์, ๋ค์ ํ์ด์ง๋ก ๋์ด๊ฐ ๋ ๋ฏธ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์๊ธฐ ๋๋ฌธ์ ๋งค๋๋ฝ๊ฒ ์ฒ๋ฆฌ ๋๋ค.
๐ NextJS
: Next.js๋ ๋ฆฌ์กํธ์๋ ์๋์๋ฒ ์ฌ์ด๋ ๋ ๋๋งserver-side rendering(SSR), ์ ์ ์ฌ์ดํธ ์์ฑstatic site generation(SSG), ์ฆ๋ถ ์ ์ ์ฌ์์ฑincremental static regeneration(ISR)๊ณผ ๊ฐ์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ฆฌ์กํธ๋ฅผ ์ํด ๋ง๋ ํ๋ ์์ํฌ ์ด๋ค.
๐๏ธ SEO(๊ฒ์ ์์ง ์ต์ ํ)
๊ฒ์์ ํ๋ฉด ๊ฒ์์์ง์ ์ธ๋ฑ์ฑํด๋ ์๋ง์ ์น ํ์ด์ง ์ค ๊ฐ์ฅ ์ ํฉํ ์์๋๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ ธ์ถํ๋๋ฐ ๊ทธ์ค
์์ ์ ์น ํ์ด์ง๊ฐ ๋ ๋ง์ด ๋ ธ์ถ๋๋๋ก ์ต์ ํ๋ ์์ ์ ๋งํ๋ค.
๐๏ธ SSR (์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง)
: ์๋ฒ๋ก๋ถํฐ ์์ ํ๊ฒ ๋ง๋ค์ด์ง htmlํ์ผ์ ๋ฐ์์ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ ๋๋ง ํ๋ ๋ฐฉ์
- ์ฒซ ํ์ด์ง์ ๋ก๋ฉ์๊ฐ์ด CSR์ ๋นํด ์งง๋ค.
์ด๋ฏธ ๋ ๋๋ง๋ ํ์ด์ง๋ฅผ ์๋ฒ์์ ๋ฐ์์ ํ๋ฉด์ ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์ด๋ค. - SEO ์ธก๋ฉด์์๋ ์ ๋ฆฌํ๋ค.
๊ฒ์์์ง์ด ํฌ๋กค๋ง์ ํ ๋ ์๋ฒ์ ์ด๋ฏธ ํ๋์ฝ๋ฉ๋ html ํ์ผ์ด ์๊ธฐ ๋๋ฌธ์ ๊ฒ์์์ง์ด ์ด ํ์ด์ง๊ฐ ์ด๋ค ์ญํ ์ ํ๋์ง ํ์ ํ๋๋ฐ ์ฉ์ดํ๋ค. - SSR์ ์๋ฒ ๋ถํ๊ฐ ์ผ์ด๋๋ ํ์์ ๋ฐ๋ผ SSG์ ISR์ ์ ์ ํ๊ฒ ์ฐ๋ฉด ์ข๋ค.
์ฅ์
- ๊ตฌ๊ธ, ๋ค์ด๋ฒ, ๋ค์ ๋ฑ์ ๊ฒ์ ์์ง์ด ์ฐ๋ฆฌ๊ฐ ๋ง๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ด์ง๋ฅผ ์ํํ๊ฒ ์์งํด์ค๋ค.
โ ๋ฐ๋ผ์ ์น ์๋น์ค์ ๊ฒ์ ์์ง ์ต์ ํ๋ฅผ ์ํด์๋ผ๋ฉด ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ๊ตฌํ ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค. - ์ด๊ธฐ ๋ ๋๋ง ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋ค.
์๋ฅผ๋ค๋ฉด, SSR์ด ๊ตฌํ๋์ง ์์ ์น ํ์ด์ง์ ์ฌ์ฉ์๊ฐ ๋ฐฉ๋ฌธํ๋ฉด, JS๊ฐ ๋ก๋ฉ๋๊ณ ์คํ๋ ๋ ๊น์ง ์ฌ์ฉ์๋ ๋น์ด ์๋ ํ์ด์ง๋ฅผ ๋ณด๋ฉฐ ๋๊ธฐํด์ผํ๋ค.
์ฌ๊ธฐ์ API๊น์ง ํธ์ถํด์ผ ํ๋ค๋ฉด ์ฌ์ฉ์์ ๋๊ธฐ ์๊ฐ์ ๋๋์ฑ ๊ธธ์ด์ง๋ค.
๋ฐ๋ฉด ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ๊ตฌํํ ์น ํ์ด์ง๋ผ๋ฉด JS ํ์ผ ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋์ง ์์ ์์ ์์๋ HTML์์ ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๋ ์ฝํ ์ธ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๊ธฐ ์๊ฐ์ด ์ต์ํ๋๊ณ , ์ด๋ก ์ธํด ์ฌ์ฉ์ ๊ฒฝํ๋ ํฅ์๋๋ค.
๋จ์
- SSR์ ๊ฒฐ๊ตญ ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํด์ผ ํ ์ผ์ ์๋ฒ๊ฐ ๋์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ฏ๋ก ์๋ฒ ๋ฆฌ์์ค๊ฐ ์ฌ์ฉ๋๋ค.
- ์๋ง์ ์ฌ์ฉ์๊ฐ ๋์์ ์น ํ์ด์ง์ ์ ์ํ๋ฉด ์๋ฒ์ ๊ณผ๋ถํ๊ฐ ์๊น.
โ ํด๊ฒฐ๋ฐฉ์ : ์ฌ์ฉ์๊ฐ ๋ง์ ์๋น์ค๋ผ๋ฉด ์บ์ฑ๊ณผ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ํตํด ์ฑ๋ฅ์ ์ต์ ํ ํด์ค์ผํ๋ค. - ๊ฐ๋ฐ์ด ์ด๋ ค์ ์ง ์ ์๋ค.
SSR์ ํ๋ฉด ํ๋ก์ ํธ์ ๊ตฌ์กฐ๊ฐ ์ข ๋ ๋ณต์กํด์ง ์ ์๊ณ , ๋ฐ์ดํฐ ๋ฏธ๋ฆฌ ๋ถ๋ฌ์ค๋ ํ๋ฆฌํจ์นญ๊ณผ ์ฝ๋ ์คํ๋ฆฌํ ์ ํธํ ๋ฑ ๊ณ ๋ คํด์ผ ํ ์ฌํญ์ด ๋ ๋ง์์ง๊ธฐ ๋๋ฌธ์ด๋ค.
๐๏ธ CSR (Client Side Render)
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๊ทธ๋ฆฐ๋ค.
- ์ฒ์ ๋ก๋ฉ์ jsํ์ผ์ ์ฉ๋์ด ํด์๋ก ๋ก๋ฉ์๊ฐ์ด ๊ธธ๋ค.
ํ์ง๋ง ์ด๊ธฐ์ ๋ก๋ฉ์ด ๋๊ณ ๋๋ฉด ํ์ด์ง ๊ฐ ์ด๋ ์ ๋งค์ฐ ๋น ๋ฅธ ์๋๋ก ์ ํ๋๊ณ , ํ์ด์ง ์ด๋ ์ ์๋ก๊ณ ์นจ๋๋ ํ์๋ ์ฌ๋ผ์ง๋ค(= SPA).
๐๏ธ SSG (Statice-Site Generation)
- ์ ์ ์ธ ์ฌ์ดํธ๋ฅผ ์์ฑํ๋ค : ์ ์ ์ธ ์ฌ์ดํธ๋ฅผ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๊ทธ๋ ค์ค๋ค.
SSG์ ๋ด๋นํ๋ ํจ์๋ก๋ getStaticProps๋ผ๋ ํจ์๊ฐ ์๋ค.
๐๏ธ ISR (Incremental Static Regeneration)
- ์ฆ๋ถ ์ ์ ์ฌ์ดํธ๋ฅผ ์ฌ์์ฑ ํ๋ค. (ํน์ ์ฃผ๊ธฐ๋ก) ์ ์ ์ธ ์ฌ์ดํธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ค์ ๊ทธ๋ ค์ค๋ค.
์ด๊ฑธ ๋ด๋นํ๋ ํจ์๋ getStaticProps ๋ผ๋ ํจ์๋ค.
๊ฐ์ ๋ฆฌํดํ๋ฉด์ ๋์ํ๋ค.
โค๏ธ ๋์์ฃผ์ ๋ถ :
'๐ React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[REACT] e.stopPropagation( ) (0) | 2024.01.18 |
---|---|
[REACT] beforeunload ํ์ด์ง ๋๊ฐ๋ / ์๋ก๊ณ ์นจ ํ ๋ alert ๋์ฐ๊ธฐ (0) | 2023.11.13 |
[REACT] react-daum-postcode๋ฅผ ์ด์ฉํ์ฌ ์ฐํธ๋ฒํธ ๊ฒ์ ๊ตฌํํ๊ธฐ (1) | 2023.10.30 |
[REACT] React-webcam ๊ตฌํํ๊ธฐ (0) | 2023.10.19 |
[REACT] Infinite scroll (๋ฌดํ์คํฌ๋กค) ๊ตฌํํ๊ธฐ (0) | 2023.10.13 |