React State
React State๋?
React์์ state๋ "๋ณ๊ฒฝ"์ ๋ค๋ฃจ๋ ์์
์ ์ฌ์ ์ผ๋ก Re-rendering์ ์ ๋ฐ์ํค๋ ๋ฐ์ดํฐ์ด๋ค.
Re-Rendering
์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋์ด View๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ฒ์ ์๋ฏธํ๋ค.
React์์๋ state, props๊ฐ ๋ณ๊ฒฝ์ด๋๋ฉด ํด๋น ์ปดํฌ๋ํธ์ ํ์ ์ปดํฌ๋ํธ๊ฐ Re-Rendering์ด ์ผ์ด๋๋ค.
ํจ์ํ ์ปดํฌ๋ํธ๋ Re-Rendering์ด ์ผ์ด๋ ๋ ๋ง๋ค ๊ทธ ์์ ํจ์๋ ๋ณ์๋ ์๋ก์ด ๊ฐ์ผ๋ก ๋์ฒด๋๋ค.
์ด๋ ๋ถํ์ํ Re-Rendering์ ์ ๋ฐํ๊ณ ์ฑ๋ฅ์ ํ๋ฅผ ์ผ์ผํจ๋ค.
React์์ Re-Rendering์ ์ต์ ํํ๋ ์ฌ๋ฌ ๊ธฐ๋ฒ์ ์ ๊ณตํ๋ค.
React.memo() โ ์ปดํฌ๋ํธ์
props
๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ๋ค.React.useMemo() โ ๊ณ ๋น์ฉ ๊ณ์ฐ ๋ก์ง์ ์บ์ฑ ํ์ฌ ์ด์ ์ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉ ํ๋์์ผ๋ก ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
React.useCallback() โ
props
๋ก ๋๊ธฐ๋ ์ฝ๋ฐฑ ํจ์๊ฐ ์๋ค๋ฉด ํจ์๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋๋ง๋ค ํด๋น ํจ์๋ ์๋ก์ด ๊ฐ์ผ๋ก ๋์ฒด๋๋ฉด์props
์ ๋ณํ๋ก Re-Rendering์ ์ ๋ฐํ๋ ์ฌ์ด๋ ์ดํํธ๋ฅผ ๊ฐ๊ฒ ๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด useCallback
์ผ๊ด์ฑ๊ณผ ํจ์จ์ฑ์ ๊ฐ์ถ state ๋ง๋ค๊ธฐ
DRY์์น์ ๋ฐ๋ฅธ๋ SSOT์ ๊ฐ๋ ์ ํ์ฉํ์ฌ ๊ตฌํํ์.
DRY(Don't Repeat Yourself)
์ค๋ณต์ ์ต์ํํ๊ณ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ๋ง๋๋ ์์น (๊ฐ๋ ์ฑ, ์ ์ง๋ณด์์ฑ, ํ์ฅ์ฑ Up)
์ค๋ณต ์ฝ๋๋ฅผ ๋ชจ๋
, ํด๋์ค
, ํจ์
๋ฑ์ผ๋ก ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ๋จ์๋ก ์ถ์ํํ์ฌ ๊ตฌํํ๋๊ฒ์ด ์ข๋ค.
์ถ์ํ๋ ์ฝ๋๋ ์์ ๋๋ฉด ํด๋น ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ณณ ๋ชจ๋ ์ ์ฉ ๋๋ฏ๋ก ๋ณ๊ฒฝ ์๊ฐ๊ณผ ์์ ๋ถ๋ด์ ํฌ๊ฒ ์ค์ผ ์ ์๋ค.
state์ DRY ์์น์ ์ ์ฉ
๋์ผํ state๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํ๋ค๋ฉด ํ ๊ณณ์์ ์ํ๋ฅผ ์ ์ํ์ฌ ๊ณต์ ํ๋ ์์ผ๋ก ์ผ๊ด์ฑ๊ณผ ํ์ฅ์ฑ์ ์ฆ๊ฐ์ํด
state๋ฅผ ์ ๋ฐ์ดํธํ๋ ํจ์๋ฅผ ์ปดํฌ๋ํธ ๋ด์ ํ๋์ ํจ์๋ก ๊ตฌํํ๊ณ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฌ์ฉํ๋ ์์ผ๋ก ๊ด๋ฆฌ
SSOT(Single Source of Truth)
์ ์ผํ ์ง์ค์ ๊ทผ์
์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ๊ด๋ฆฌํ๊ฒ ๋๋ฉด ์ผ๊ด์ฑ๊ณผ ์ ํฉ์ฑ์ ์งํค๊ธฐ ์ด๋ ต๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์จ ๊ฐ๋ ์ด SSOT
SSOT๋ ๋ฐ์ดํฐ์ ์ ์ผํ ์ถ์ฒ๊ฐ ๋๋ ์๋ณธ ๋ฐ์ดํฐ ์์ค๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ, ๋ค๋ฅธ ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ด ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์๋๋ค.
๋ฐ๋ผ์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์์ ๋๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๋ ๋ชจ๋ ๊ณณ์์ ์ผ๊ด์ฑ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ๊ฒ ๋๋ค.
Flux Arhitecture
React์์ state๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ํคํ ์ฒ ์ค ํ๋, SSOT์ ๋ฐ์ ํ ๊ด๋ จ์ด ์๋ค.
React์์ ๊ณต์ ๋๋ state
๋ฅผ ๊ด๋ฆฌํ ๋, ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ์์ ๊ด๋ฆฌํ๋ฉด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์งํค๊ธฐ ์ด๋ ต๊ณ ์ ์ง๋ณด์์ฑ์ด ๋ฎ์์ง๋ค.
๋ฐ๋ผ์ ๊ณต์ ๋๋ state
๋ฅผ ํ ๊ณณ(Store)์์ ๊ด๋ฆฌํ๊ณ ๋ง์ฐฌ๊ฐ์ง๋ก state
๋ณ๊ฒฝ๋ ํ ๊ณณ์์ ๊ด๋ฆฌํจ์ผ๋ก์จ, ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ์ง์ ์ ์ผ๋ก ํด๋น state
๋ฅผ ์์ ํ์ง ์๊ณ ์์ฒญํ๋ ์์ผ๋ก ๊ด๋ฆฌํ์ฌ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋ค.
React State์ ์กฐ๊ฑด
๋ณํ์ง ์๋ ๋ฐ์ดํฐ๋ state๊ฐ ์๋๋ค.
๋ถ๋ชจ์๊ฒ์ ๋ฐ์ props๋ state๊ฐ ์๋๋ค.
๋ค๋ฅธ state๋ props์ ์ํด ๊ณ์ฐ๋๋ฉด state๊ฐ ์๋๋ค.
๋ค๋ฅธ state์ ๊ณ์ฐ๋๋ ๋ฐ์ดํฐ๋ฅผ state๋ก ๋๋ ์๋ชป๋ ์ฝ๋ ์์
Typescript๋ฅผ ์ ์ฐ๋ฉด ์ง์ ๊ด๋ฆฌํ๋ state์ ์๋ฅผ ์ค์ผ ์ ์๋ค.
๊ด๋ฆฌํ๋ ์ํ๊ฐ ๋ง์์ง์๋ก ๋ณต์กํด์ง๋ค.
๊ด๋ จ์๋ ์ํ๋ผ๋ฆฌ ๋ฌถ์ด interface
๋ก ์ ์ ์ ํด๋๋ฉด ์ํ ํ๋๋ก ๊ด๋ฆฌํด๋ ์ด์ํ์ง ์๊ณ ๋ถ๋ช
ํด์ง๋ค.
๊ฐ๋ น props๋ฅผ ๋๊ธธ ๋ ๋ฉ์ด๋ฆฌ ๊ฐ์ฒด ํ๋๋ฅผ ๋๊ฒจ๋ ํด๋น ๋ฐ์ดํฐ ํ์ ์ด ๋ถ๋ช ํ๋ฏ๋ก ์์ ํ๊ณ ๊น๋ํ๊ฒ ์์ฑํ ์ ์๋ค.
๋ฐ๋ฉด ํ์ ์ ์ฌ์ฉํ์ง ์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ผํ๊ฒ ๊ฐ์ฒด๋ก ๋ฌถ์ ๊ฒฝ์ฐ ๊ทธ ์ํ๋ฅผ ์ ๋ฌํ๋ ์์ ์ ๊ทธ ์์ ์ ๋ณด๊ฐ ๋ฌด์์ด ์๋์ง ๋ถ๋ถ๋ช ํ๋ฏ๋ก ์ํ๋ฅผ ์๊ฒ ์ชผ๊ฐ ๊ด๋ฆฌํ๋ ํธ์ด ์์ ํ๋ค.
state๋ ๋๊ฐ ๊ด๋ฆฌํด์ผ ํ ๊น? Lifting State Up
ํด๋น state์ ์์กดํ๋ ์ปดํฌ๋ํธ๋ค์ ๋ชจ๋ ํฌํจํ๋ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๊ด๋ฆฌ๋ฅผ ํ๊ณ ์์๋ค์๊ฒ props๋ก state๋ฅผ ์ ๋ฌํ๋ค.
์ด๋ ๊ฒ state๋ฅผ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก ๋์ด์ฌ๋ฆฌ๋ ์์
์ Lifting State Up
์ด๋ผ๊ณ ํ๋ค.
Inverse Data Flow
Lifting State Up์ผ๋ก ๋ถ๋ชจ ์ปดํฌ๋ํธ์ state๋ฅผ ๋์ด์ฌ๋ ค ๋ถ๋ชจ๊ฐ state๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋์ง๋ง ์์ ์ปดํฌ๋ํธ๊ฐ ํด๋น state๋ฅผ ๋ณ๊ฒฝํ๋ ํธ๋ฆฌ๊ฑฐ์ผ ์ ์๋ค. ์ด ๋ ๋ถ๋ชจ์์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์๋ฅผ ํธ๋ฆฌ๊ฑฐ ์ญํ ์ ํ๋ ์์์๊ฒ props๋ก ๋๊ฒจ ์ฐ๊ฒฐํด์ค์ผ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ํจ์๋ ๊ฐ์ผ๋ก ๋ค๋ฃฐ ์ ์๋ ์ผ๊ธ ๊ฐ์ฒด์ด๋ฏ๋ก ๋ค๋ฅธ ๊ฐ์ฒ๋ผ props๋ก ์ ๋ฌ์ด ๊ฐ๋ฅํ๋ค.
์ผ๊ธ ๊ฐ์ฒด(first-class object)๋?
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๊ฐ์ผ๋ก ์ทจ๊ธํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
์ผ๊ธ ๊ฐ์ฒด์ ํน์ง
ํจ์์ ์ธ์๋ก ๋๊ธธ ์ ์๋ค.
ํจ์์ ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉ๋ ์ ์๋ค.
๋ณ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ(๊ฐ์ฒด, ๋ฐฐ์ด)์์ ์ ์ฅํ ์ ์๋ค.
๋น๊ต ์ฐ์ฐ์ ์ํํ ์ ์๋ค. (===, !== ๋ฑ)
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ผ๊ธ ๊ฐ์ฒด์ ์ผ๊ธ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒ๋ค์ด์์ฌ ์๋ค.
์ผ๊ธ ๊ฐ์ฒด์ธ ๊ฒ๋ค โ ๊ฐ์ผ๋ก ์ทจ๊ธ๋๋ ๋ชจ๋ ๊ฒ +
ํจ์โจ
์ผ๊ธ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒ๋ค โ
์์ ์ฐ์ฐ์
,๋ฐ๋ณต๋ฌธ
,์กฐ๊ฑด๋ฌธ
,try/catch๋ฌธ
๋ํ์ ์ผ๋ก ํจ์๊ฐ ์ผ๊ธ ๊ฐ์ฒด์ด๋ค. ์ด๋ฅผ ์ผ๊ธ ํจ์๋ผ๊ณ ๋ ํํํ๋ค.
์ผ๊ธ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒ๋ค์ ์ผ๊ธ ํจ์๋ก ๋ฐ๊พธ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์ ์ค์ํ ๊ธฐ์ ์ด๋ค.
์ด๋ค ๋ฌธ๋ฒ์ด๋ ์ผ๊ธํจ์๋ก ๋ง๋ค ์ ์๋ค.
Last updated