๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
WEB/Front-End๐ŸŒ

[React] state๋ž€? (props์™€ ๋น„๊ต)

by narang111 2021. 10. 2.

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๋กœ๋Š” ์–ด๋–ค ํ˜•ํƒœ์˜ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋˜๋Š”๊ฐ€๋ผ๊ณ  ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์•Œ ๊ฒƒ๋งŒ ์•Œ ๋ฉด ๋œ๋‹ค.