props๋ ์ฌ์ฉ์๊ฐ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ์ ์ฅ์์ ์ค์ํ๊ณ
state๋ props์ ๊ฐ์ ๋ฐ๋ผ์ ๋ด๋ถ์ ๊ตฌํ์ ํ์ํ ๋ฐ์ดํฐ๋ค์ด๋ค.
components์ ๊ธฐ๋ณธ์ ์ธ ๋์์ ๋ฐ๊พธ๊ณ ์ถ์ ๋ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ ๊ฒ์ด
ํ๊ทธ์์๋ ์์ฑ์ ํด๋นํ๋ props์๋ค. ์ฌ์ฉ์์๊ฒ ์ค์!
์ฌ์ฉ์์๊ฒ๋ ์ ํ์๋, ์์์๋ ์๋๋ ์ปดํฌ๋ํธ์์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒ๋ค์ state๋ผ๊ณ ํ๋ค.
๊ทธ๋์ ๋ฆฌ์กํธ์ ๊ฐ์ ์์คํ ์ด component๋ฅผ ๋ง๋ค๊ณ component๊ฐ ์ข์ ๋ถํ์ด ๋๊ธฐ ์ํด์๋
component๋ฅผ ์ฌ์ฉํ๋ ์ธ๋ถ์ props์ props์ ๋ฐ๋ผ์ component๋ฅผ ๊ตฌํํ๋ ๋ด๋ถ์ state๋ผ๋ ์ ๋ณด๊ฐ ์ฒ ์ ํ๊ฒ ๋ถ๋ฆฌ๋์ด์์ด์ผ ํ๋ค.
์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ ๋ ์ข ๋ ๋ณตํฉ์ ์ผ๋ก, ๋ค์ํ ์ผ๋ค์ ํ๋ ์ปดํฌ๋ํธ๋ค์ ๋ง๋ค ๋ ํ์์ ์ธ ์์์ธ state์ ๋ํด์ ์์๋ณธ๋ค.
App์ปดํฌ๋ํธ ์์ Subject๋ผ๋ ํ์ ์ปดํฌ๋ํธ๊ฐ ์๋ฐ.
์ด Subject์ props ๊ฐ๋ค์ด ํ๋์ฝ๋ฉ ๋์ด์๋ค .
์ด ๊ฐ์ state๋ก ๋ง๋ค๊ณ state ๊ฐ์ subject์ props๋ก ์ ๋ฌํ๋ ๊ฒ์ผ๋ก ์ฝ๋๋ฅผ ๊ฐ์ ํด๋ณผ ๊ฒ์ด๋ค.
์ด๋ ํ ์ปดํฌ๋ํธ๊ฐ ์คํ๋ ๋, render๋ผ๋ ํจ์๋ณด๋ค ๋จผ์ ์คํ๋๋ฉด์ ์ปดํฌ๋ํธ๋ฅผ ์ด๊ธฐํ์์ผ์ฃผ๊ณ ์ถ์ ์ฝ๋๋ constructor ํจ์ ์์ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
์ด๊ธฐํ๊ฐ ๋๋๋ฉด this.state={} ๋ก state๊ฐ์ ์ด๊ธฐํ์์ผ์ค๋ค.
์ง๊ธ ์ฐ๋ฆฌ๋ subject์ ๊ฐ์ stateํ ์ํฌ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
subject props ๊ฐ์ผ๋ก ๋ค์ ๊ฐ์ฒด๋ฅผ ์ฃผ๋๋ฐ ๊ทธ ๊ฐ์ฒด์ title์ WEB sub๋ฅผ World Wide Web์ด๋ผ๊ณ ๊ฐ์ ์ค state ๋ฅผ ๋ง๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋ง๋ state๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋๋?
ex) ์ด state๊ฐ์ title์ ๊ฐ์ผ๋ก ์ฃผ๊ณ ์ถ๋ค!
์ด๋ ๊ฒ ์์ฑํ๋ฉด ๋ฆฌ์กํธ์์๋ props ๊ฐ์ ๋ฐ์ดํ๋ก ๋ฌถ์ด์ฃผ๋ฉด ๋ฌธ์๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฌธ์๊ฐ ์๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฝ๋๋ก์จ ์คํํ๊ณ ์ถ๋ค๋ฉด ์ค๊ดํธ๋ฅผ ์จ์ฃผ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ํด์ฃผ๋ฉด ์น ๋ธ๋ผ์ฐ์ ์์ ๋ณด์ด๋ WEB์ด๋ผ๋ ๊ธ์๋ ์์ consturctor ํจ์์ state์์ ๊ฐ์ ธ์จ ๊ฐ์ด๋ค.
์ ๋ฆฌ)
App.js๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ํ์ผ์ index.js์ด๋ค.
index.js๋ฅผ ๋ณด๋ฉด App์ ์คํํ๋ ์ฝ๋๋ ์ด ๋ถ๋ถ์ด๋ค.
์ด ์ฝ๋๋ฅผ ๋ณด๋ ์ฐ๋ฆฌ ์ ์ฅ์์๋ ๋ด๋ถ์ ์ผ๋ก state๊ฐ subject๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ์ ์ ์๋ค.
์ฌ๊ธฐ์ ์ค์ํ ๋ถ๋ถ์ด "์ ์ ์๋ค, ๋ชจ๋ฅธ๋ค" ๋ผ๋ ๋ถ๋ถ์ด๊ณ
์ธ๋ถ์์ ์ ํ์๊ฐ ์๋ ์ ๋ณด๋ฅผ ์ฒ ์ ํ๊ฒ ์จ๊ธฐ๋๊ฒ, ์๋ํ๋๊ฒ ์ข์ ์ฌ์ฉ์ฑ์ ๋ง๋๋ ๊ฒ์ ํต์ฌ์ด๋ค.
App์ด ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ ์ํ๋ state๋ผ๋ ํํ๋ฅผ ํตํด์ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ๊ฒ ๋ง๋ค์ด์ง state๊ฐ์ Subject๋ผ๊ณ ํ๋ ์ปดํฌ๋ํธ์ props๊ฐ์ผ๋ก ์คฌ๋ค.
๋ฌด์จ ๋ป์ด๋?
์์ ์ปดํฌ๋ํธ์ธ App์ ์ํ๋ฅผ ํ์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ๊ณ ์ถ์ ๋๋
์ด๋ ๊ฒ ์์ ์ปดํฌ๋ํธ์ state๊ฐ์ ํ์ ์ปดํฌ๋ํธ์ props๊ฐ์ผ๋ก ์ ๋ฌํ๋ ๊ฒ์ ์ผ๋ง๋ ์ง ๊ฐ๋ฅํ๋ค.
์ฌ๊ธฐ๊น์ง ๋ดค๋ state๋ subject๋ผ๊ณ ํ๋ property์ ๊ฐ ํ๋์๋๋ฐ
์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ๋ค๋ฃฐ ๋๋ ๋ฐฉ๋ฒ์ด ์กฐ๊ธ ๋ฌ๋ผ์ง๋ค.
์ด๋ฒ์๋ TOC ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ App์ ๋ด๋ถ state๋ฅผ TOC์ ์ฃผ์ ํด์ฃผ๋ ๊ฒ์ ํตํด์ ์๋์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๊ฒ ํด๋ณผ ๊ฒ์ด๋ค. ๋ชฉ๋ก์ด ์ถ๊ฐ๋ ๋๋ง๋ค TOC์ ์๋์ผ๋ก ์ถ๊ฐ๋๋๋ก!
TOC์ ๋ถ๋ชจ๊ฐ ๊ฐ์ง๊ณ ์๋ state๋ฅผ ์ด์ฉํด์ TOC์ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พธ๋๋ก ํด๋ณผ ๊ฒ์ด๋ค.
1) contents๋ผ๊ณ ํ๋ property๋ฅผ state์ ์ถ๊ฐํ๋ค.
2) ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋๊ดํธ๋ก ๋ฐฐ์ด์ ๋ง๋ค์๋ค.
3) ๊ทธ ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ๊ฐ์ ๊ฐ์ฒด์ธ๋ฐ ๊ทธ ๊ฐ์ฒด๋ id, title, desc ๊ฐ๋ค์ด ์๋ค.
4) ์ด ๋ฐฐ์ด์ TOC์ ์ฃผ์ ํ๊ณ ์ถ๋ค๋ฉด data๋ผ๋ props๋ก this.state.contents๋ฅผ ๋ฃ์ด์คฌ๋ค.
5) TOC.js์์๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ๋ฝ์์ <li>ํ๊ทธ๋ฅผ ํ๋์ฉ ๋ง๋ค๊ณ ๋ฆฌ์คํธ์ ๋ด์์ฃผ์๋ค.
6) ๋ง๋ ๋ฆฌ์คํธ๋ฅผ <ul>์ ๊ทธ๋๋ก ๋ฃ์ด์ค๋ค.
ํ ๊ฐ์ง ์ฃผ์ํ ์ ์ lists.push์์ elements ์ฌ๋ฌ ๊ฐ๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ณ ์๋๋ฐ
์ด ๊ฒฝ์ฐ ์ฝ์์์๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- ๊ฐ๊ฐ์ ๋ฆฌ์คํธ ํญ๋ชฉ๋ค์ key๋ผ๊ณ ํ๋ props๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผํ๋ค.
๊ทธ๋์, ์ฌ๋ฌ ๊ฐ์ ๋ชฉ๋ก์ ์๋์ผ๋ก ์์ฑํ ๋์๋ key๊ฐ์ ๋ง๋ค์ด์ฃผ์ด์ผํ๋ค.
์ด ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ค๊ธฐ๋ณด๋ค, ๋ฆฌ์กํธ๊ฐ ๋ด๋ถ์ ์ผ๋ก ํ์ํด์ ์์ฒญํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ ๋ฃ์ด์ค๋ค!
ํ์ค์์ฝ.
๋ถ๋ชจ๋ App์ ์ ์ฅ์์๋ state๋ผ๋ ๋ด๋ถ์ ๋ณด๋ฅผ,
์์์๊ฒ ์ ๋ฌํ ๋๋ props๋ฅผ ํตํด์ ์ ๋ฌํ๊ณ ์๋ค.
์ฑ์ ์ ์ฅ์์๋ topic์ด ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ๋์๊ฐ๋์ง ์ ํ์๊ฐ ์๋ค.
data๋ผ๊ณ ํ๋ props๋ก๋ ์ด๋ค ํํ์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ฉด ๋๋๊ฐ๋ผ๊ณ ํ๋ ์ฌ์ฉ์ ์ ์ฅ์์ ์ ๊ฒ๋ง ์ ๋ฉด ๋๋ค.
'WEB > Front-End๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] event์์ state ๋ณ๊ฒฝ (feat. bind, setState) (0) | 2021.10.07 |
---|---|
[React] event (0) | 2021.10.04 |
[React] ์ปดํฌ๋ํธ ํ์ผ ๋ถ๋ฆฌ (0) | 2021.10.01 |
[React] Props (0) | 2021.10.01 |
[React] ์ปดํฌ๋ํธ ๋ง๋ค๊ธฐ (๊ธฐ์ดํํ) (0) | 2021.09.28 |