State
ํ์ต ํค์๋
state (์ํ)
์ํํธ์จ์ด ๊ฐ๋ฐ 3๋ ์์น - DRY ์์น
Lifting State Up
Inverse Data Flow
SSOT(Single Source of Truth)
useState
1๊ธ ๊ฐ์ฒด(first-class object)๋?
State
๐ State(์ํ)๋?
์ปดํฌ๋ํธ ๋ด๋ถ์์
๋ณ๊ฒฝ
๋๋ ๋์ ์ธ ๊ฐ์ปดํฌ๋ํธ ๋ ๋๋ง์ ์ํฅ์ ์ฃผ๋ ๊ฐ์ฒด
์ปดํฌ๋ํธ์ ๋ด๋ถ์์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ ํด์ผ ํ ๋ ์ฌ์ฉํ๋ค.
๐ ์ปดํฌ๋ํธ๊ฐ Re-render ํ๋ ์กฐ๊ฑด
์ํ๊ฐ์ด ๋ณ๊ฒฝ ๋์์ ๋ ( useState, Redux ๋ฑ์ ํตํ ์ํ๊ฐ ๋ณ๊ฒฝ์)
Props์ ๊ฐ์ด ๋ณ๊ฒฝ ๋์์ ๋
์์ ์ปดํฌ๋ํธ์ state ๋ณ๊ฒฝ๋์ด ๋ ๋๋ง ํ๊ฒ๋๋ฉด ํ์ ์ปดํฌ๋ํธ๋ ๋ค์ ๋ ๋๋งํ๊ฒ ๋๋ค.
State๊ฐ ๋๊ธฐ ์ํ ์กฐ๊ฑด
๋ฐ์ดํฐ๋ผ๊ณ ํด์ ๋ชจ๋ state ์๋๋ค!
๋ณ๊ฒฝ๋์ง ์๋ ๊ฑด state๋ก ๋ค๋ฃฐ ๊ฐ์น๊ฐ ์๋ค. โ ๋ณ๊ฒฝ๋๋ ๊ฐ์ด์ด์ผ ํ๋ค.
๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ props๋ฅผ ํตํด ์ ๋ฌํ๋ค๋ฉด state๊ฐ ์๋๋ค.
๋ค๋ฅธ state๋ props๋ฅผ ์ด์ฉํด ๊ณ์ฐ์ด ๊ฐ๋ฅํ๋ค๋ฉด state๊ฐ ์๋๋ค.
๐ ์ํํธ์จ์ด ๊ฐ๋ฐ 3๋ ์์น
๊ฐ์ ์ฝ๋๋ฅผ ์ค๋ณตํด์ ์์ฑํ์ง ์๋๋ค.
์ค๋ณต ์ฝ๋๋ฅผ ์ต๋ํ ์ค์ฌ์ผ ๋ณต์กํ ์์คํ ์์ ๊ฐ๋ฐ ๋ฐ ์ ์ง๋ณด์๋น์ฉ์ด ์ ๊ฐ์ด ๋๋ค.
๋จ์ผ ์ฑ ์ ์์น(SRP) , ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
๊ฐ๋จํ ์ฝ๋๊ฐ ๊ฐ๋ ์ฑ์ด ์ข๊ณ , ๋ฒ๊ทธ๋ฅผ ์ ๋ฐํ๋๊ฒ๋ ์ค์ด๋ ๋ค.
๋ถํ์ํ๊ฒ ํ์ฅ์ ์น์ถฉํ ์ฝ๋๊ฐ ์๊ธฐ๊ฑฐ๋ ์ง๊ธ ๋น์ฅ ํ์๋ก ์์ ๋ก์ง์ ๋ง๋ค์ง ๋ง์๋ ์์น
โฌ Lifting State Up
๐ค state๋ฅผ ๋๊ฐ ๊ด๋ฆฌํ๊ณ , ์์ ํด์ผ ํ ๊น?
state๊ฐ ํ๋์ ์ปดํฌ๋ํธ์๋ง ์ํฅ์ ์ค๋ค๋ฉด ํด๋น ์ปดํฌ๋ํธ์๋ง ์์นํด๋ ๋๋ค. ํ์ง๋ง ๋๊ฐ์ ์ปดํฌ๋ํธ๊ฐ ํ๋์ state๋ก ๋ถํฐ ์ํฅ์ ๋ฐ๋๋ค๋ฉด ๋ ์ปดํฌ๋ํธ ๊ณตํต ์์ ์ปดํฌ๋ํธ์ state๋ฅผ ๋์ด์ฌ๋ ค ๊ณต์ ํด์ผํ๋ค. ์ด์ ๊ฐ์ ๋ฐฉ๋ฒ์ Lifting State Up state ๋์ด์ฌ๋ฆฌ๊ธฐ
๋ผ๊ณ ํ๋ค.
๐ค ๊ทธ๋ ๋ค๋ฉด Lifting State Up์ ์ญ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ด ์๋๊ฐ?
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ด๋ผ๋ ์์น์ ๋ฐ๋ผ ํ์ ์ปดํฌ๋ํธ๋ ์์ ์ปดํฌ๋ํธ๋ก ๋ถํฐ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ์ ํํ ํน์ธ ํ์ ์ด ๋ฌด์์ธ์ง๋ง ์์ ์๊ณ ๋ฐ์ดํฐ๊ฐ state, ํ๋์ฝ๋ฉ์ผ๋ก ์ ๋ ฅ๋ ๋ด์ฉ์ธ์ง๋ ์์ง ๋ชปํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํ์ ์ปดํฌ๋ํธ์์ ์ด๋ค ์ด๋ฒคํธ๋ก ์ธํด ์์ ์ปดํฌ๋ํธ์ state๊ฐ ๋ฐ๋๋ ๊ฒ์ ๋ง์น ์ญ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ด๋ผ๊ณ ์๊ฐ ๋๋ค.
์์ ์ปดํฌ๋์ "์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์" ๊ทธ ์์ฒด๋ฅผ ํ์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ๊ณ , ์ด ํจ์๋ฅผ ํ์ ์ปดํฌ๋ํธ๊ฐ ์คํํ๋ค.
โ state ๋์ด์ฌ๋ฆฌ๊ธฐ
๋ state๋ฅผ ์ง์ ์ ๋ฌํ๋ ๊ฒ์ด ์๋ state ๊ฐฑ์ ํจ์๋ฅผ ์ ๋ฌ ๋ฐ์ ํด๋น ํจ์๋ฅผ ์คํ์์ผ state ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ํ๋ค.
๋จ์ผ ์ง์ค ๊ณต๊ธ์
๋ชจ๋ ๋น์ฆ๋์ค ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๊ณต๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ ๋งํ๋ค.
React์์๋ ๋ชจ๋ state๊ฐ ํ๊ณณ์ ์๋ค๋ ๋ป์ด ์๋๋ผ, ๊ฐ state ๋ง๋ค ํด๋น ์ ๋ณด๋ฅผ ์์ ํ๋ ํน์ ์ปดํฌ๋ํธ๊ฐ ์๋ค๋ ์๋ฏธ ์ปดํฌ๋ํธ๋ง๋ค ๊ณต์ ํ๋ state๋ค์ ๊ฐ์ ์์ฑํ๋ ๊ฒ์ด ์๋, ๋ถ๋ชจ์ปดํฌ๋ํธ(๋จ์ผ์ฑ ์)์์ state๋ฅผ ์์ฑํด, ์์์๊ฒ ์ ๋ฌํ๋๊ฒ์ ์๋ฏธ
๐ช useState
React Hook์ด๋ฉฐ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉ
setStateํจ์๋ฅผ ์ด์ฉํด์ state๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ํด๋น ์ปดํฌ๋ํธ๋ ํ๋ฉด์ ๋ค์ ๋ ๋๋ง์ด ๋๋ค.
์ํ๋ฅผ ๋ณํ์๋ setState ํจ์๋ ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๋ค.
์์ ์ฝ๋๋ฅผ ์คํ ๋ณด๋ฉด console.log(state)
๊ฐ์ ์ด์ ์ ์ํ๊ฐ์ธ 0์ด ์ถ๋ ฅ๋๊ณ , state ๊ฐ์ 1์ด๋ค.
โ ์ด๋ ๊ฒ ๋์ํ๋ ์ด์ ๋ setState ํจ์๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๊ณ React๊ฐ ํ๋์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์ ๋ด์ ๋ก์ง์ ๋ชจ๋ ์ฝ์ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ๋ค์์ ์ผ๊ด ์ฒ๋ฆฌ(Batch)ํด ํ๋ฒ์ ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์ด๋ค.
๐ค ์ React๋ ์ํ ๊ฐ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ฒ ๋ง๋ค์์๊น?
React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ง์ ์ปดํฌ๋ํธ์ ์ํ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ์๋ค. ์ด๋ฐ ์ํฉ์์ ๋จ ํ๋์ ์ํ๊ฐ ๋ณํํ ๋๋ง๋ค ๊ด๋ จ๋ ๋ทฐ๋ฅผ ๋งค๋ฒ ๋ฆฌ๋ ๋๋งํ๋ ๊ฒ์ ๋นํจ์จ๊ณผ ํจ๊ป ์ฑ๋ฅ์์ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋ค.
๐ค ์ฐ์๋ setState๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์?
setStateํจ์์ ์ธ์๋ก ํจ์๋ฅผ ์ ๋ฌํ๋ค.
useEffect์ ์์กด์ฑ ๋ฐฐ์ด์ ํ์ฉํ๋ฉด ๋๋ค.
๐ 1๊ธ ๊ฐ์ฒด(first-class object)๋?
1๊ธ ์๋ฏผ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๊ฐ์ฒด(Object)
Javascript ์์๋ ๊ฐ์ฒด๋ 1๊ธ ์๋ฏผ์ ์ถฉ์กฑํ๊ธฐ ๋๋ฌธ์ 1๊ธ๊ฐ์ฒด ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
ํจ์์งํฅ ์ธ์ด๊ฐ ๋๊ธฐ ์ํด์๋ 1๊ธ ๊ฐ์ฒด ์ฆ, 1๊ธ ํจ์ ๊ฐ๋ ์ ๋ง์กฑํด์ผ๋๋ฉฐ, JS์์๋ ์ด๋ฅผ ๋ณด์ฅํ๊ธฐ ๋๋ฌธ์ ํจ์ํ ํจ๋ฌ๋ค์์ ๊ฐ์ถ ์ธ์ด๋ผ ๋ณผ ์ ์๋ค.
โ props๋ก ํจ์๋ฅผ ๋๊ฒจ ์ค ์ ์๋๊ฑด 1๊ธ ๊ฐ์ฒด์ด๊ธฐ์ ๊ฐ๋ฅํ๋ค. ๊ทธ๋์ ์ด๋ค ํจ์๋ฅผ ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ๋๊ฒจ์ฃผ๊ฑฐ๋, ์ด๋ค ํจ์๋ฅผ ๋ฆฌํด๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ผ๊ณ ์ดํดํ๋ค.
๐ ์ฐธ๊ณ
Last updated