๋ฆฌ์•กํŠธ

๐Ÿ“˜ React ๊ณต๋ถ€ํ•˜๊ธฐ | component ๋งŒ๋“ค๊ธฐ, props์™€ state ๊ฐœ๋…

grasinnong 2020. 11. 25. 22:00

 

 

 

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ vs ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ 

์ปดํฌ๋„ŒํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋‹จ์œ„๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•˜๋‚˜์˜ ์ปค์Šคํ…€ ํƒœ๊ทธ์˜ ์—ญํ• ์„ ํ•œ๋‹ค. 

 

์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜ํ˜•์œผ๋กœ, ํด๋ž˜์Šคํ˜•์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ 

ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋กœ <App /> ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด ์ปดํฌ๋„ŒํŠธ๋Š” index.js์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ , <App name="wow" />๋กœ name์ด๋ผ๋Š” props๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ  ์žˆ๋‹ค. 

 

props๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” App์—์„œ props๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์•ผํ•œ๋‹ค.

 

 

 

 

ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ 

ES6 class๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 

 

 

์–ด๋–ป๊ฒŒ Hello, wow๊ฐ€ ํ™”๋ฉด์— ๋ Œ๋”๋ง ๋˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ผ๊นŒ?

1. <App name = "wow" /> ์—˜๋ฆฌ๋จผํŠธ๋กœ ReactDOM.render()๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค. 

2. React๋Š” {name : "wow"} ๋ฅผ props๋กœ ํ•˜์—ฌ App ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. 

3. App ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฒฐ๊ณผ์ ์œผ๋กœ <h1> Hello, wow <h1> ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค. 

4. React DOM์€ <h1> Hello, wow <h1> ์—˜๋ฆฌ๋จผํŠธ์™€ ์ผ์น˜ํ•˜๋„๋ก DOM์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. (Virtual DOM)


์ฃผ์˜ํ•  ์ ์€ ์ปดํฌ๋„ŒํŠธ์˜ ์ด๋ฆ„์€ ํ•ญ์ƒ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค. <app> (x) -> <App> (o)

 

 

ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ ์ฐจ์ด์ 

1. ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” hook์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”ํ•œ state๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.

2. ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” renderํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. 

 

 

 

 

 

Props 

props๋Š” ์†์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ์ดํ„ฐ์ด๋‹ค.

 

- ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ƒ์†ํ•  ์ˆ˜ ์žˆ์Œ

- ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ props์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์œ„์˜ ์ฝ”๋“œ๋กœ ์˜ˆ๋ฅผ ๋“ค๋ฉด, name="wow" ๋ผ๋Š” ์†์„ฑ์€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์ธ index.js์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์ธ <App /> ์œผ๋กœ ์ƒ์†๋˜๋Š” ์†์„ฑ์ด๋‹ค. ์ด props๋Š” ์˜ค์ง index.js์—์„œ๋งŒ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๊ณ , <App />์—์„œ๋Š” ์ˆ˜์ •์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค. 

 

์ฆ‰, Props๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๋‹ค

 

 

State

state๋Š” ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด๋‹ค.

 

ํ˜„์žฌ ๋‚ด๊ฐ€ 20์‚ด์ด๋ผ๋ฉด this.state = {age : 20} ์ด๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด ๊ฐ’์€ ํ•ด๊ฐ€ ์ง€๋‚˜๋ฉด ๋ณ€ํ•˜๋Š” ๊ฐ’์ด๋‹ค. 

 

 

๊ฐ„๋‹จํ•˜๊ฒŒ button์„ ๋ˆŒ๋Ÿฌ์„œ +, -๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค. ์—ฌ๊ธฐ์„œ constructor๋ฅผ ๋ณด๋ฉด this.state = {value : 0} ์ด ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

state๋Š” props์™€ ๋‹ค๋ฅด๊ฒŒ constructor์•ˆ์— ์บก์Аํ™” ๊ทธ๋ฆฌ๊ณ  ์€๋‹‰ํ™”๋˜์–ด์žˆ๋‹ค. ๋˜, ์ปดํฌ๋„ŒํŠธ์— ์˜ํ•ด ์™„์ „ํžˆ ์ œ์–ด๋œ๋‹ค.(๊ฐ’ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅ)


state์™€ props์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ state๋Š” ๋‚˜์ด์™€ ๊ฐ™์ด ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด๊ณ ,  props๋Š” ์ด๋ฆ„์ฒ˜๋Ÿผ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ณ€ํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์ด๋‹ค(์ผ๋ฐ˜์ ์œผ๋กœ).

 

 

 

 

setState() ์‚ฌ์šฉ ์ด์œ  (React Immutable)

state๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ this.setState๋ฅผ ์‚ฌ์šฉํ•ด์„œ state๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค. 
this.setState๋กœ state๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์•„๋ฌด๋ฆฌ state๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ render()๋ฅผ ์žฌํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ state๋ฅผ ๋ฐ”๊พธ๋”๋ผ๋„ ๋ฆฌ์•กํŠธ๋Š” state๊ฐ€ ๋ณ€๊ฒฝ๋œ์ง€ ์•Œ์ง€ ๋ชปํ•œ๋‹ค. 

 

setState๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฆฌ์•กํŠธ๋Š” ์ž๋™์œผ๋กœ state๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค(์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ์žˆ๋Š” state๋“ค๋„).