[React 06] - container, presenter, props, setState

yiwoojungยท2022๋…„ 7์›” 2์ผ
2

{C} Codecamp FE 06

๋ชฉ๋ก ๋ณด๊ธฐ
6/21
post-thumbnail

๐Ÿ—ฟ ์˜ค๋Š˜์˜ ๋ชฉํ‘œ

  1. Container / Presenter
  2. ๋‚ด๋ถ€ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” Props
  3. setState์˜ ์›๋ฆฌ

1. Container / Presenter

๋งŒ์•ฝ ๊ธฐ๋Šฅ ๋ถ€๋ถ„(Javascript)๊ณผ UI ๋ถ€๋ถ„(HTML)์˜ ์ฝ”๋“œ๋ฅผ ํ•œ ํŽ˜์ด์ง€์— ํ•œ๋ฒˆ์— ์ ๋Š”๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋‚ฌ์„ ๋•Œ ๋ชจ๋“  ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๋น„ํšจ์œจ์ ์œผ๋กœ ๋‹ค ๊ฒ€ํ† ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ธด ์†Œ์Šค์ฝ”๋“œ๋ฅผ JS๋ถ€๋ถ„(๊ธฐ๋Šฅ ๋ถ€๋ถ„)๊ณผ JSX๋ถ€๋ถ„(UI ๋ถ€๋ถ„)์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ฃผ๋ฉด ์ˆ˜์ •ํ•˜๊ธฐ ํ›จ์”ฌ ํŽธํ•ด์ง„๋‹ค.

์ด๋ ‡๊ฒŒ ๊ธฐ๋Šฅ ๋ถ€๋ถ„์„ ๋”ฐ๋กœ Container ํŒŒ์ผ๋กœ ๋‚˜๋ˆ„๊ณ , UI ๋ถ€๋ถ„์„ Presenter ํŒŒ์ผ๋กœ ๋‚˜๋ˆ„์–ด ์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ธฐ๋Šฅ์ด ์ž‘๋™์„ ์•ˆํ•œ๋‹ค๋ฉด ์ปจํ…Œ์ด๋„ˆ ๋ถ€๋ถ„์„ ๋ณด๋ฉด ๋˜๊ณ 
UI๊ฐ€ ์ด์ƒํ•˜๋‹ค ์‹ถ์œผ๋ฉด ํ”„๋ ˆ์  ํ„ฐ ๋ถ€๋ถ„์„ ๋ณด๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์‹คํ–‰ํ•  ๋•Œ๋Š” ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ํ•ฉ์น˜๋ฉด ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

๋จผ์ € ์ปจํ…Œ์ด๋„ˆ์™€ ํ”„๋ฆฌ์  ํ„ฐ๋ฅผ ๋‚˜๋ˆ„์–ด ๋ณด์ž.

ํ”„๋ ˆ์  ํ„ฐ ํŽ˜์ด์ง€๋ฅผ export ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ์—์„œ import ํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋‹ค. import ํ•œ ํ”„๋ ˆ์  ํ„ฐ๋ฅผ return ๋ถ€๋ถ„์— ์ ์–ด์ค€๋‹ค. ์ด๋Ÿฌ๋ฉด ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์ ธ์„œ ์‹คํ–‰์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

์ด๋•Œ import ํ•ด ์˜จ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ํ•˜๊ณ  ๋ถ€๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ํ•œ๋‹ค.


์ด์ œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜๋ˆ„์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ์— ์ ์–ด ๋†“์€ ํ•จ์ˆ˜๋“ค์€ ํ”„๋ ˆ์  ํ„ฐ์— ๋ถˆ๋Ÿฌ์ค˜์•ผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํŒŒ์ผ์„ ๋‚˜๋ˆ„์–ด ๋†“์œผ๋‹ˆ๊นŒ ์ด๋Ÿฐ ๋ถ€๋ถ„๋“ค์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ ๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด props ์ด๋‹ค.

2.๋‚ด๋ถ€ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” Props

props๋ž€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๋ฌผ๋ ค์ฃผ๋Š” ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.

props๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ๊ธด๋‹ค. ์•ž์˜ ๊ฒƒ์ด key๊ฐ€ ๋˜๊ณ  ๋’ค์˜ ๊ฒƒ์ด value ๊ฐ€ ๋˜์–ด ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.
props = {aaa : handleChangeWriter}

์ž์‹ ์ปดํฌ๋„ŒํŠธ์ธ ํ”„๋ ˆ์  ํ„ฐ์—์„œ๋Š” props.aaa๋ผ๊ณ  ์ ์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฆฌ์•กํŠธ์—์„œ ์ž์‹์ด ๋ถ€๋ชจ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๋Š” ๋ฐฉ๋ฒ•์€ ์—†๋‹ค. 
๋ฆฌ์•กํŠธ์˜ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์€ ๋‹จ๋ฐฉํ–ฅ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

์ด์ฒ˜๋Ÿผ ๋‹จ์œ„๋ณ„๋กœ ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆ„์–ด ์ž‘์—…์„ ํ•œ๋‹ค๋ฉด ๋ถ€ํ’ˆํ™”ํ•ด์„œ ์ž‘์—…ํ•˜๊ธฐ ์‰ฌ์›Œ ์ˆ˜์ • ๋ฐ ์žฌ์‚ฌ์šฉ์ด ์‰ฌ์›Œ์ง„๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ํด๋” ๊ตฌ์กฐ๋ฅผ ์ฒด๊ณ„ํ™”ํ•ด์„œ ์ž‘์—…ํ•˜๋ฉด ์ข‹๋‹ค.



3. setState์˜ ์›๋ฆฌ

setState๊ฐ€ ์ผ์–ด๋‚  ๋•Œ๋งˆ๋‹ค ํŽ˜์ด์ง€๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง ๋œ๋‹ค(๋ฆฌ๋ Œ๋”).

๊ทธ๋ž˜์„œ let์œผ๋กœ ํ•œ๋‹ค๋ฉด ํ™”๋ฉด์— ๋ฐ˜์˜์ด ์•ˆ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ํ•œ๋ฒˆ setState๊ฐ€ ์ผ์–ด๋‚ ๋•Œ๋งˆ๋‹ค ๋ฆฌ๋ Œ๋” ๋œ๋‹ค๋ฉด ๋„ˆ๋ฌด ๋น„ํšจ์œจ์ ์ด๊ณ  ์„ฑ๋Šฅ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋ฆฌ๋ Œ๋”๋ฅผ ์ตœ์†Œํ™” ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฆฌ๋ Œ๋”๋˜์ง€ ์•Š๊ณ  ๋งˆ์ง€๋ง‰๊นŒ์ง€ ์™€์„œ ๋ฆฌ๋ Œ๋”๊ฐ€ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ํ•˜๋‚˜ ๋Š๋ฆฌ๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.
state๋Œ€์‹  event.target.value๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ž‘์„ฑ๊ณผ ๋ Œ๋”๋ง์ด ๊ฐ™์ด ์ผ์–ด๋‚˜๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€