TIL 2
TIL2
๐ Q1. React์์ ๋ถํ์ํ ๋ ๋๋ง์ด ๋ฐ์ํ๋ ์ํฉ์๋ ์ด๋ค ๊ฒ ์์๊น?
-
๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋ฉด์ ์์ ์ปดํฌ๋ํธ๋ ์ ๋ถ ๋ฆฌ๋ ๋๋ง
- ๋ถ๋ชจ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋ฉด, props๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ ์์์ด ๊ฐ์ด ๋ฆฌ๋ ๋๋ง ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๊ณ ํ๋ค.
-
props๋ก ๋งค๋ฒ ์๋ก์ด ์ฐธ์กฐ๊ฐ(๊ฐ์ฒด, ๋ฐฐ์ด, ํ์)์ ์ ๋ฌํ ๋ -> React.memo๋ฅผ ์จ๋ ์๋ฏธ๊ฐ ์์
<Child data={[1,2,3]} /> // ๋งค๋ฒ ์๋ก์ด ๋ฐฐ์ด ์์ฑ <Child onClick={() => doSomething()} /> // ๋งค๋ฒ ์๋ก์ด ํจ์ ์์ฑ -
state๋ฅผ ๋ถํ์ํ๊ฒ ํฌ๊ฒ ๊ด๋ฆฌํ ๋
- ํ๋์ state ๊ฐ์ฒด์ ํ๋๊ฐ ๋ง์์ง๋ฉด, ํน์ ํ๋๋ง ๋ณ๊ฒฝ์ด ๋๋ ์ ์ฒด๊ฐ ๋ค์ ๋ฆฌ๋ ๋๋ง๋๋ค.
-
context ๊ณผ๋ ์ฌ์ฉ
- Context Provider์ ๊ฐ์ด ์กฐ๊ธ๋ง ๋ฐ๋์ด๋ ๋ชจ๋ Consumer ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋ค.
-
๋ถํ์ํ key ์ฌ์ฉ ์ค๋ฅ
- map์ ๋๋ฆด ๋ index๋ฅผ key๋ก ์ฐ๋ฉด, ์ค์ ๊ฐ์ ์ ๋ฐ๋์ด๋ key๊ฐ ๋ฐ๋์ด์ ์ ์ฒด๊ฐ ๋ฆฌ๋ ๋๋ง๋ ์ ์๋ค.
๋ฆฌ์กํธ์์ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ง๊ธฐ ์ํด์๋ useMemo, React.memo, useCallback ๊ฐ์ ์ต์ ํ ๊ธฐ๋ฒ์ด๋, state ๊ตฌ์กฐ ๋ถ๋ฆฌ๋ฅผ ํตํด์ ๊ฐ์ ํ ์ ์๋ค.
React.memo Vs useMemo์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?
- React.memo๋ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ์, ๋ถ๋ชจ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋๋ผ๋ props๊ฐ ๋ฐ๋์ง ์์ผ๋ฉด ์์ ์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง์ ๋ง์์ค๋ค. ๋ฐ๋ฉด useMemo๋ ๊ฐ์ ๋ฉ์ค์ด์ ์ด์ ํด์ ๋ถํ์ํ๊ฒ ๋์ผํ ์ฐ์ฐ์ ๋ฐ๋ณตํ์ง ์๋๋ค.
๋ฉ๋ชจ์ด์ ์ด์ : ๊ฐ์ ์ ๋ ฅ์ด ๋ค์ ์ฃผ์ด์ง ๋ ์ด์ ์ ์ ์ฅํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ฌ ์ค๋ณต ๊ณ์ฐ์ ์์ ๊ณ ์ฑ๋ฅ์ ํฅ์์ํค๋ ์ต์ ํ ๊ธฐ๋ฒ์ ๋๋ค
useCallback์ ์ธ์ ์ฐ์ด๊ณ , useMemo์๋ ์ด๋ค ๊ด๊ณ๊ฐ ์์๊น?
useCallback์ ์์ ์ปดํฌ๋ํธ์ ์ ๋ฌ๋๋ ํจ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํด์ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ง์์ค๋ค. ์ฝ๋ฐฑ์ props๋ก ๋๊ธฐ๋ฉด ์๋ก์ด ํจ์๊ฐ ์์ฑ๋ผ React.memo๋ก๋ ๋ง์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ฉด useMemo๋ ๊ฐ์ ๋ฉ๋ชจ์ด์ ์ด์ ํด์ ๋ถํ์ํ๊ฒ ๋์ผํ ์ฐ์ฐ์ ๋ฐ๋ณตํ์ง ์๋๋ค. useCallback์ ๋ด๋ถ์ ์ผ๋ก useMemo๋ฅผ ํ์ฉํ ๊ตฌํ๊ณผ ๋์ผํด ํจ์ ๋ฒ์ ์ useMemo๋ผ๊ณ ์ดํดํ ์ ์๋ค.
๐ Q2. React์์ state๋ฅผ ์ง์ ์์ ํ์ง ์๊ณ setState๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
-
React๊ฐ ๋ณ๊ฒฝ์ ๊ฐ์งํ๋ ๋ฐฉ์
- React๋ ์ํ์ ์ฐธ์กฐ๊ฐ ๋ฐ๋์๋์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณ๊ฒฝ ์ฌ๋ถ๋ฅผ ํ๋จํ๋ค.
-
์ง์ ์์ ์ ๋ฌธ์ ์
- ๋ง์ฝ state๋ฅผ ์ง์ ์์ ํ๋ฉด ์ฐธ์กฐ๋ ๊ทธ๋๋ก์ด๊ธฐ ๋๋ฌธ์ React๊ฐ ๋ณ๊ฒฝ์ ๊ฐ์งํ์ง ๋ชปํด ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋์ง ์๋๋ค.
-
setState์ ์ญํ
- setState๋ React ๋ด๋ถ์ ์ ๋ฐ์ดํธ ํ์ ์ํ ๋ณ๊ฒฝ์ ๋ฑ๋กํ๊ณ , batching ์ฒ๋ฆฌ๋ฅผ ํตํด ์ฑ๋ฅ์ ์ต์ ํ ํ๋ฉด์ ์ปดํฌ๋ํธ ๋ฆฌ๋ ๋๋งํ๋ค.
- ๋ํ ๋ถ๋ณ์ฑ์ ์งํค๋ ๋ฐฉ์์ผ๋ก ์ํ๋ฅผ ์ ๋ฐ์ดํธํด์ผ React์ผ ์ต์ ํ๋๊ตฌ (React.memo)๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋ค.
- batching : ์ฌ๋ฌ ๊ฐ์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ชจ์์ ํ๋ฒ์ ๋ฆฌ๋ ๋๋งํ๋ React์ ์ต์ ํ ๋ฐฉ์์ด๋ค. ์๋ฅผ ๋ค์ด setState๋ฅผ ์ฌ๋ฌ๋ถ ํธ์ถํด๋, ๊ฐ๊ฐ์ ํธ์ถ์ ๋ฆฌ๋ ๋๋งํ์ง ์๊ณ ๋ง์ง๋ง์ ํ๋ฒ๋ง ๋ ๋๋งํ๋ค.
๐ Q3. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์ธ๋ฐ ์ด๋ป๊ฒ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊น?
๋ธ๋ผ์ฐ์ ๋ Node.js ๋ฐํ์์ด ๋น๋๊ธฐ ์์ ์ ๋์ ์ฒ๋ฆฌํ๊ณ ์๋ฃ๋ ์ฝ๋ฐฑ์ ํ์คํฌ ํ์ ๋ฃ์ด์ค๋ค.
์ฑ๊ธ์ค๋ ๋ : ํ๋ฒ์ ํ๋์ ์์ ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
์ด๋ฒคํธ ๋ฃจํ(Event Loop)์ ํ์คํฌ ํ(MacroTask, MicroTask)์ ์ฐจ์ด
์ด๋ฒคํธ ๋ฃจํ๋ ์ฝ์คํ์ด ๋น์ด์์๋ ํ์คํฌ ํ์ ์๋ ์์ ์ ๊ฐ์ ธ์ ์คํํด ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค. ํ์คํฌ ํ๋ ๋งคํฌ๋ก ํ์คํฌ(setTimeout, setInterval ๋ฑ)์ ๋ง์ดํฌ๋ก ํ์คํฌ(Promise.then ๋ฑ)๋ก ๋๋๋๋ฐ, ์ด๋ฒคํธ ๋ฃจํ๊ฐ ๋งคํฌ๋ก ํ์คํฌ ์คํ ํ ๋ฐ๋์ ๋ชจ๋ ๋ง์ดํฌ๋ก ํ์ค๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ๋ ๊ท์น์ ๊ฐ์ง๋ค.