๐Ÿ“š Study/JS, JQuery

[React JS][๋‹ˆ์ฝ” ์ฝ”๋”ฉ] STATE

kkh1902 2022. 2. 17. 09:05
728x90
๋ฐ˜์‘ํ˜•

3.0 Understanding State

  • state๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณณ์ด๋‹ค.
  • ๋ฐ”๋‹๋ผ JS๋กœ ์˜ˆ์ œ๋ฅผ ์™„์„ฑ์‹œํ‚ค๋ ค๋ฉด counter๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ๊ทธ๊ฑธUI์— ๋””์Šคํ”Œ๋ ˆ์ด ํ•˜๊ณ  ์žˆ๋‹ค.
  • ๊ทธ๊ฑธ state๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. counter๋ง์ด๋‹ค.
  • ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด React.js์–ดํ”Œ์— ๊ฐ’์ด ๋ฐ”๋€” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์ค„์ˆ˜ ์žˆ์„๊นŒ. 
  • ์ด์ œ React.js ์ฝ”๋“œ ๋‚ด์—์„œ ์นด์šดํŠธ๋ฅผ ์…€ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ๋ณด์ž.
  • ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค ์ข‹์ง€์•Š์€ ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅธํ•˜๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผํ•  ์ตœ๊ณ ์˜ ๋ฐฉ์‹์ด๋‹ค.
  • ๋จผ์ € ๋ณ„๋กœ ์ข‹์ง€ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ ํ•ด๋ณด๊ณ  ์šฐ๋ฆฌํ•œํ…Œ ์–ด๋–ค๊ฒŒ ํ•„์š”ํ•˜๊ณ , ์–ด๋–ค๊ฑธ ํ•ด์•ผ๋˜๋Š”์ง€ ์ดํ•ดํ•˜๊ณ  ๋‚˜์„œ ํ”„๋กœํŽ˜์…”๋„ํ•œ React.js ๋ฐฉ์‹์„ ๋ณด์—ฌ์ค€๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฉด ์™œ ๊ทธ๋Ÿฐ๋ฐฉ์‹์œผ๋กœ ํ•˜๋Š” ๊ฑด์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„๊ฑฐ๋‹ค.
  • let counter= 0 ; ์ด๋Ÿฐ ๋ณ€์ˆ˜๋“ค์„ JSX์— ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ€๋ฅด์ผœ ์ค„๊ฑฐ๋‹ค.
  • vanila.js
  • ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • $ ๋ฌธ์ž๋ฅผ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜ (๋ณ€์ˆ˜)๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ์“ด๋‹ค. ๋ฌธ์ž์—ด + ๊ฐœ๋…
  • ๋‹ค๋ฅธ ๋ฐฉ์‹ button์œผ๋กœ ๊ฐ€์„œ, ์ „์— ์จ๋ดค๋˜ onClick prop์„ ๋งŒ๋“ค์–ด ์ฃผ๋ฉด๋œ๋‹ค.(React.js ๋ฐฉ์‹)
  • ์ด ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๊ฐ€ countUp ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  countUp์€ ์นด์šดํŠธ๋ฅผ ๋ฐ”๊ฟ”์ค„ ๊ฑฐ๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฉด ์ด๋ฒคํŠธ ์ž‘๋™ X - > UI ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์ง€ ์•Š์•„์„œ ์ผ์–ด๋‚˜๋Š” ๋ฌธ์ œ์ด๋‹ค.
  • ์ด๋ฒคํŠธ๊ฐ€ ์ž‘๋™์€ ํ•˜๋‚˜ UI๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์งˆ ์•Š๋Š”๋‹ค.
  • ํ•จ์ˆ˜๋Š” ๊ณง๋ฐ”๋กœ ์‹คํ–‰ x

  • ์ด ์ค„์— ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ๋ฐ”๋กœ ์‹คํ–‰๋œ๋‹ค. (์šฐ๋ฆฌ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ–ˆ์„๋•Œ ๋ง์ด๋‹ค.)
  • ๋ฆฌ๋ Œ๋”๋ง์„ ํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค.(Container๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•ด์„œ ๋‹ค์‹œ ๋ณด์—ฌ์ค˜์•ผ๋œ๋‹ค.)
  • function ์ด๋‚˜ const๋‚˜ ๋น„์Šท? ์œ„์— const Containerํ•ด์„œ function์ฒ˜๋Ÿผ ์“ฐ๋Š”๊ฑฐ
  • const A= () ⇒ ();
  • function A() {}

  • ๋” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
  • ์™œ๋ƒ๋ฉด ์—ฌ๊ธธ ๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๊ฐ’์„ ๋ฐ”๊ฟ€ ๋•Œ๋งˆ๋‹ค, ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋Š” ๊ฑธ ์žŠ์–ด์„œ๋Š” ์•ˆ๋˜๊ฑฐ๋“ 
  • ๋ Œ๋”๋ง์„ ๊ณณ๊ณณ์—์„œ ํ•ด์ค˜์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ
  • ์–ด๋–ป๊ฒŒ ๋ฐ”๊พธ๋Š”์ง€๋Š” ๋‹ค์Œ๊ฐ•์˜ ๊ทธ์ „์— React๊ฐ€ ๊ฐ€์ง„ ์œ„๋ ฅ์„ ๋ณด์—ฌ์ค€๋‹ค.
  • ํด๋ฆญํ–ˆ์„๋•Œ ๊ตฌ๊ธ€ Chrome์ด๋‚˜ Brave๊ฐ€ ์š”์†Œ๋“ค์ด ์—…๋ฐ์ดํŠธ๋˜๊ณ  ์žˆ๋Š”๊ฑธ ๋ฐ”๋กœ๋ฐ”๋กœ ๋ณด์—ฌ์ค€๋‹ค.
  • ํด๋ฆญํ•˜๋ฉด body๋ž‘ span์ด ์—…๋ฐ์ดํŠธ๋˜๊ณ  ์žˆ๋Š”๊ฑธ ๋ณด์—ฌ์ค€๋‹ค.
  • ๋ณด๋‹ค์‹œํ”ผ React.js๋Š” ์ด์ „์— ๋ Œ๋”๋ง๋œ ์ปดํฌ๋„ŒํŠธ๋Š” ์–ด๋–ค๊ฑฐ์˜€๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์žˆ๋‹ค.
  • ๊ทธ๋‹ค์Œ์— ๋ Œ๋”๋ง๋  ์ปดํฌ๋„ŒํŠธ๋Š” ์–ด๋–ค์ง€๋ฅผ ๋ณด๊ณ 
  • ๋‹ค์‹œ Total clicks๋ฅผ ์ƒ์„ฑํ•  ํ•„์š” ์—†๊ณ  button๋„ ๋‹ค์‹œ ์ƒ์„ฑํ•  ํ•„์š”๋„ ์—†๊ณ  ์˜ค๋กœ์ง€ ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์š”์†Œ๋“ค์„ ๋ฆฌ๋ Œ๋”๋งํ•˜๋ ค๊ณ  ํ•ด๋„ ์ „๋ถ€๋‹ค ์ƒˆ๋กœ ์ƒ์„ฑ๋˜์ง„ ์•Š๋Š”๋‹ค
  • ์˜ค๋กœ์ง€ ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ์ƒ์„ฑ๋ ๊ฑฐ๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผ๋˜๋Š”๊ฑด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค Container๋ฅผ ๋ฆฌ๋ Œ๋”๋ง ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ง€๊ธˆ ์ด ๋ฐฉ์‹์€ ๊ณ„์†ํ•ด์„œ renderํ•ด์ฃผ๋Š”๊ฑธ ์žŠ์œผ๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๊ณ ์˜ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ๋‹ค.
  • ๋‹ค์Œ ๊ฐ•์˜์—์„œ๋Š” ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐœ์ƒ์‹œํ‚ฌ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณผ ๊ฑฐ๋‹ค.

ํ•ด์„ ์ •๋ฆฌ

  • render() ํ•˜๋ฉด render() ํ•จ์ˆ˜ ๋ฐœ๋™ ReactDOM์‚ฌ์šฉํ•ด์„œ HTML์— ๋‚˜ํƒ€๋ƒ„ <Container>์— ํ•ด๋‹นํ•˜๋Š”๊ฑธ ๋ฃจํŠธ์— ๋ณด๋ƒ„
  • Container๋Š” h3์™€ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ๋‹ค์‹œ ๋ Œ๋” ํ•œ๋‹ค?

3.1 setState part One

  • ์ฒซ์งธ๋กœ ์ปดํฌ๋„ŒํŠธ๋‚˜ JSX์— ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • ์šฐ๋ฆฌ๋Š” render๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์–ดํ”Œ๋ฆฌ ์ผ€์ด์…˜์ด ์ฒ˜์Œ ์‹คํ–‰๋ ๋•Œ ํ˜ธ์ถœํ•จ
  • render๊ฐ€ ์ตœ์ดˆ๋กœ ํ˜ธ์ถœ๋  ๋•Œ, ์ด ํ•จ์ˆ˜๋Š” Container ์ปดํฌ๋„ŒํŠธ๋ฅผ root div์— ๋‹ด์•„์ค„ ๊ฑฐ๋‹ค.

  • ๊ทธ๋ฆฌ๊ณ  Container ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋ ๊ฑฐ๋‹ค.→ Container ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด React Element๊ฐ€ ๋ฐ˜ํ™˜๋  ๊ฑฐ๋‹ค.
  • ์ด React ์š”์†Œ๋Š” Total click๊ณผ ์šฐ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€ํ•ด์ค€ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ, ๋ฌผ๋ก  Container ์ปดํฌ๋„ŒํŠธ ์ „์ฒด๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•˜๋Š” ๊ฑฐ์ง€๋งŒ ์‚ฌ์‹ค์€ HTML ์ฝ”๋“œ์—์„œ๋Š” ์˜ค๋กœ์ง€ ์ˆซ์ž๋งŒ ๋ฐ”๋€Œ๋Š” ๊ฑฐ๋‹ค.
  • ์ „์ฒด๋ฅผ ์ „๋ถ€ ์žฌ์„ฑ์„ฑํ•  ํ•„์š”์—†์ด ๋ฐ”๋€๋ถ€๋ถ„๋งŒ ์ƒˆ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.

 

๋ฌธ์ œ๊ฐ€ ์ƒ๊น€

  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค ์ดํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๊ฑธ ์žŠ์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ๊ฑฐ๋‹ค.
  • ๋ฆฌ๋ Œ๋”๋ง ํ•˜๋Š”๋ฐ ๋” ์ข‹์€ ๋ฐฉ์‹์ด ์žˆ์„๊ฑฐ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” counter๊ฐ€ 0์ธ ์‹œ์ ์—์„œ ์ตœ์ดˆ๋กœ ๋ Œ๋”๋ง์„ ํ• ๊ฑฐ๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋ ค๋Š”๊ฑด ์ง€๊ธˆ๊นŒ์ง€ ์ง„ํ–‰ํ•œ ๋ถ€๋ถ„์„ ์ „๋ถ€ ์‚ญ์ œํ•˜๊ณ  React.js ์–ดํ”Œ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์ž๋™์œผ๋กœ ๋ฆฌ๋ Œ๋”๋ง์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ๊ณ ์˜ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ๋ณด๋ คํ•œ๋‹ค.
  • React.js๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์ด ์›ํ•˜๋Š” ๋ฆฌ๋ Œ๋”๋ง์„ ์–ด๋–ป๊ฒŒ ๋„์™€์ฃผ๋Š”์ง€ ์•Œ์•„๋ณผ๊ฑฐ๋‹ค.
  • ๊ทธ ์ด์œ ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋งŒ์•ฝ ์‚ฌ์šฉ์ž์—๊ฒŒ ์—…๋ฐ์ดํŠธ๋œ๊ฑธ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์œผ๋ฉด ์ƒˆ๋กœ์šด ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

React ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค๋ฃฐ๋•Œ, ์–ด๋””์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์œผ๋ฉด ๋˜๋Š”์ง€ ์•Œ๋ ค์ค€๋‹ค.

  • ๊ทธ ์ „์—๋Š” counter ๊ฐ™์€ ๋ณ€์ˆ˜์— ๋‹ด์•˜๋‹ค.

์ด๊ฑฐ์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.

  • ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์€ ์ดˆ๊ธฐ๊ฐ’ ์ด๊ณ  ๋‘ ๋ฒˆ์งธ ์š”์†Œ๋Š” ๊ทธ ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜ ์ด๋‹ค.
  • ๋ฐฐ์—ด ์ƒํƒœ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด ๋ณด๊ธฐ ๋ถˆํŽธํ•˜๋‹ค.
  • ์—ฐ๊ฒฐ๋๊ณ  ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ๋ณด๊ธฐ ์ข‹์ง€๋Š” ์•Š๋‹ค.
  • ๊ทธ๋ž˜์„œ JavaScript๊ฐ€ ๊ฐ€์ง„ ์ •๋ง ๋ฉ‹์ง„ ๋ฌธ๋ฒ•์ด ์žˆ๋Š”๋ฐ ์•„์ฃผ ์งง์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค.
  • const x = [1, 2, 3]
  • const [a, b, c] = x;
  • a=1 , b=2, c=3
  • ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์›Œ ๋ณผ๊ฑด ์–ด๋–ป๊ฒŒ modifier๋ฅผ ์ด์šฉํ•ด์„œ counter์˜ ๊ฐ’์„ ๋ฐ”๊ฟ”์ค„์ง€
  • ์™œ modifier๊ฐ€ ํ•„์š”ํ•œ์ง€
  • counter = 120 ์™œ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ˆ๋˜๊ณ  modifier๊ฐ€ ํ•„์š”ํ•œ์ง€ ๋ฐฐ์›Œ๋ณด์ž

3.2 setState part Two

  • React.js๊ฐ€ data๋ฅผ ๋‹ด๋Š” ๊ฒƒ๊ณผ ์—…๋ฐ์ดํŠธํ•˜๋Š”๊ฑธ ์–ด๋–ป๊ฒŒ ๋„์™€์ฃผ๋Š”์ง€ ๋ฐฐ์›Œ๋ดค๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด๊ฑด useState๋ฅผ ์‚ฌ์šฉํ–ˆ์„๋•Œ useState๋Š” ์šฐ๋ฆฌํ•œํ…Œ ๋ฐฐ์—ด ํ•˜๋‚˜๋ฅผ ์ค€๋‹ค.
  • ๊ทธ ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋‹ด์œผ๋ ค๋Š” data ๊ฐ’์ด๊ณ 
  • ๋‘๋ฒˆ์งธ ์š”์†Œ๋Š” ์ด data ๊ฐ’์„ ๋ฐ”๊ฟ€๋•Œ ์‚ฌ์šฉํ•  modifier์ด๋‹ค.
  • ์ด์ œ ์™œ modifier๊ฐ€ ํ•„์š”ํ•œ์ง€ ๋ฐฐ์›Œ๋ณผ ๊ฑฐ๋‹ค.

๋˜ ๋ฌธ์ œ ๋ฐœ์ƒ

  • ๊ฐ’์„ ๋ฐ”๊ฟจ๋Š”๋ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด๋‹ค.
  • ์—ฌ๊ธฐ ์ €๊ธฐ์„œ ์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฑด ์ƒ๋‹นํžˆ ๊ท€์ฐฎ๋‹ค.
  • ๋ฆฌ๋ Œ๋”๋ง์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • ์–ด๋–ค ๊ฐ’์„ ๋ถ€์—ฌํ•˜๋˜ modifierํ•จ์ˆ˜๋Š” ๊ทธ ๋ฐ–์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋ฆฌ๋ Œ๋”๋ง์„ ์ผ์œผํ‚ฌ ๊ฑฐ๋‹ค.
  • ์ด๊ฒŒ ๋ฐ‘์— ํ•จ์ˆ˜ ํ•˜๋‚˜๋กœ ๋œ๋‹ค.
  • ๋ฆฌ๋ Œ๋”๋ง์ด ์ž๋™์œผ๋กœ ์ด๋ฃจ์–ด์กŒ๋‹ค.
  • ์ „์ „ ๊ฐ•์˜์—์„œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๋ฆฌ๋ Œ๋”๋ง ํ•ด์คฌ๋‹ค
  • button์ด onClick ๋˜๋ฉด onclick ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ผ
  • ๋ณดํ†ต ์‚ฌ๋žŒ๋“ค์ด ํ•˜๋Š” ๋ฐฉ์‹์€, ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฆ„ ๋ถ™์ผ๋•Œ counter์ฒ˜๋Ÿผ ์›ํ•˜๋Š”๋Œ€๋กœ ๋ถ™์ด๊ณ 
  • modifier๋Š” modifier๊ฐ€ ์•„๋‹ˆ๋ผ, set ๋’ค์— ๋ฐ์ดํ„ฐ์ด๋ฆ„์„ ๋ถ™์—ฌ์ฃผ๋Š” ๊ฑฐ์•ผ
  • React.js๋Š” ์˜ค๋กœ์ง€ ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ์„ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค.
  • React๊ฐ€ ๊ฐ€์ง„ ๋งˆ๋ฒ•์ด๋‹ค
  • React๋Š” ์—…๋ฐ์ดํŠธ ์‚ฌ์ด์‚ฌ์ด๋งˆ๋‹ค, ์ •ํ™•ํžˆ ์–ด๋–ค๊ฒƒ์ด ์—…๋ฐ์ดํŠธ๋๋Š”์ง€ ํŒŒ์•…ํ•ด์„œ HTML์—์„œ ๊ทธ ๋ถ€๋ถ„๋งŒ ๊ณ ์น˜๋Š” ๊ฑฐ๋‹ค.

3.3 Recap

  • React ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ”๊พธ๋Š”์ง€ ๋ฐฐ์›Œ๋ดค๊ณ 
  • modifier ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ปดํฌ๋„ŒํŠธ์˜ state๋ฅผ ๋ฐ”๊ฟ€๋•Œ ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒˆ๋กœ์šด ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ๋‹ค์‹œ ํ•œ๋ฒˆ ๋ Œ๋”๋ง ๋˜๋Š”๊ฑฐ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•˜๊ณ  UI๋ฅผ refreshํ•˜๋Š” ๊ฑฐ๋‹ค.
  • ๊ฐ€์žฅ ์ค‘์š”ํ•œ๊ฑด state๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๋ฆฌ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚œ๋‹ค๋Š” ๊ฑฐ๋‹ค.
  • state๊ฐ€ ๋ฐ”๋€Œ๋ฉด, ์ƒˆ๋กœ์šด ๊ฐ’์„ ๊ฐ€์ง€๊ณ  React๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ refreshํ•ด์ค€๋‹ค.

3.4 State Functions

  • ์‚ฌ์šฉ์ž๋“ค์˜ input์„ ์–ด๋–ป๊ฒŒ ์–ป๋Š”์ง€
  • form์„ ๋งŒ๋“ค์—ˆ์„๋•Œ state๋Š” ์–ด๋–ค์‹์œผ๋กœ ์ž‘์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋ฐฐ์šธ๊ฑฐ๋‹ค.
  • ์™œ๋ƒํ•˜๋ฉด ์ด์ œ๊ป ๋ฐฐ์šด๊ฒƒ๋“ค๋กœ ์ž‘์€ ํ”„๋กœ์ ํŠธ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ฐ์Šต์„ ํ• ๊ฑฐ๋‹ค.
  • ๋จผ์ € ์•ฑ์˜ state๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋ฐฐ์šธ๊ฑฐ๋‹ค.
  • ์–ด์ฉŒ๋ฉด counter๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ–ˆ๋˜ ๊ฐ’์ด ์•„๋‹์ˆ˜ ์žˆ๋‹ค.(๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ณ€๊ฒฝ๋˜์–ด์„œ)
  • state๋ฅผ ๋ฐ”๊พธ๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ๋‹ค.
    1. setCounter๋ฅผ ์ด์šฉํ•ด์„œ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ฑฐ๋‹ค.(์ง์ ‘ ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฒƒ)
    1. ์ด๋ฐฉ๋ฒ•์ด๊ธด ํ•˜๋‚˜ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.(ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ)
    • ์ด์ „ ๊ฐ’์„ ๋ฐ”ํƒ•์œผ๋กœ ํ˜„์žฌ ๊ฐ’์„ ์„ค์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด,
    • ์ด์ œ ์ด ํ•จ์ˆ˜๊ฐ€ ๋ญ˜ returnํ•˜๋˜์ง€ → ๊ทธ๊ฒŒ ์ƒˆ๋กœ์šด state๊ฐ€ ๋œ๋‹ค.
    • ๋‘๊ฐœ ๋‹ค ํ˜„์žฌ์˜ state๋ฅผ ๊ฐ€์ง€๊ณ  ์ƒˆ๋กœ์šด ๊ฐ’์„ ๊ณ„์‚ฐํ•ด๋‚ด์ง€ ํ•˜์ง€๋งŒ ์•„๋ž˜์ชฝ์ด ๋” ์•ˆ์ „ํ•˜๋‹ค.
    • ๋ฆฌ์•กํŠธ๊ฐ€ ์ด current๊ฐ€ ํ™•์‹คํžˆ ํ˜„์žฌ ๊ฐ’์ด๋ผ๋Š”๊ฑธ ๋ณด์žฅํ•˜๊ณ  ์žˆ๋‹ค.
    • ์šฐ๋ฆฌ๊ฐ€ ์ •ํ™•ํžˆ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก
    • ํ˜„์žฌ state๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ„์‚ฐ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฑฐ๋‹ค.
  • ๋‹ค์Œ ๊ฐ•์˜์—์„œ๋Š” unit์˜ converter(๋‹จ์œ„ ๋ณ€ํ™˜๊ธฐ)์„ ๋งŒ๋“ค๊ฑฐ๊ณ 
    • unit converter๋ž€ ๋ถ„ ๋‹จ์œ„(minute)๋ฅผ ๋„ฃ์œผ๋ฉด ๊ทธ๊ฑธ ์‹œ๊ฐ„ ๋‹จ์œ„(hour)๋กœ ๊ฐ’์„ ์ถœ๋ ฅํ•ด ์ฃผ๋Š” ๊ฑฐ๋‹ค.
    • ex> 55km๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ด๊ฒŒ ๋ช‡ mile์ธ์ง€ ์–ป์–ด๋‚ด๋Š” ๊ฑฐ๋‹ค.
  • ๋˜ money converter๋„ ๋ฐฐ์šฐ๊ฒŒ ๋ ๊ฑฐ๋‹ค.

3.5 Inputs and State

unit conversion(๋‹จ์œ„ ๋ณ€ํ™˜) ์•ฑ์„ ๋งŒ๋“ค ๊ฑฐ๋‹ค.

๋ถ„→ ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ

  • JSX๋Š” HTML๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค.
  • label์€ ์•Œ๋‹ค์‹œํ”ผ input ์˜†์— ์จ์ฃผ๋Š” ๊ธ€์”จ๋‹ค.
  • input์€ id๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • HTML์€ for ์†์„ฑ์„ ์ด์šฉํ•œ๋‹ค.
  • React์„ธ๊ณ„์—์„œ ์ด๊ฑด ์™„์ „ํžˆ ํ‹€๋ฆฐ ๊ฒƒ์ด๋‹ค.
  • JSX์—์„œ๋Š” ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” HTML์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค.
    • ??? JSX๋ž‘ HTML์„ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„ํ•˜๋Š” ๊ฑฐ์ง€?
  • ๋‹จ์ถ•ํ‚ค ๋ˆ„๋ฅด๋ฉด ์ž๋™ ์ •๋ฆฌ๋˜๋Š”๊ฑฐ ์•Œ์•„๋ณด๊ธฐ
  • development ๋กœ ๋ฐ”๊พธ๋ฉด
  • ์œ ํšจํ•˜์ง€ ์•Š์€ DOM property ‘for’์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ์œ ํšจํ•˜์ง€ ์•Š์€ DOM property ‘for’์ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.
  • ‘๋„ˆ ํ˜น์‹œ html for’์„ ์˜๋ฏธํ•˜๋Š” ๊ฑฐ๋‹ˆ ?๋ผ๊ณ  ๋ฌป๋Š”๋‹ค.
  • ์™œ ์šฐ๋ฆฌ๊ฐ€ for ๊ฐ™์€ ๋ช‡๊ฐ€์ง€ ์šฉ์–ด๋“ค์„ ์‚ฌ์šฉ์„ ํ•  ์ˆ˜ ์—†๋ƒ๋ฉด
  • for์€ JavaScript ์šฉ์–ด ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • class๊ฐ€ JavaScript์šฉ์–ด์ด๊ธฐ๋„ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ
  • ๋ฌธ์ œ
    1. class๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ ์šฐ๋ฆฐ class๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
    2. for์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
  • JSX๋Š” HTML๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์  ๋ช‡๊ฐ€์ง€ ๊ธฐ์–ตํ•  ๊ฒŒ ์žˆ๋‹ค.
    • class X className ์ด๋ผ๊ณ  ์จ์ค˜์•ผ ํ•ด
    • for X → htmlFor์ด๋ผ๊ณ  ์จ์ค˜์•ผ ํ•œ๋‹ค.
    • for ์ด ๋ญ”๋ฐ
  • ์ด์ œ๋ถ€ํ„ฐ ์ค‘์š” minutes์— ํ•„์š”ํ•œ state๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‹ค.
    • react code๋กœ minutes์— ์–ด๋–ค ์ˆซ์ž๋ฅผ ์ ์—ˆ๋Š”์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฌธ์ œ
    • ์ ํžŒ ์ˆซ์ž์˜ value๊ฐ€ ๋ญ”์ง€ ๋ชจ๋ฅธ๋‹ค๋Š” ๊ฑฐ๋‹ค.
    • React JS๋กœ ํ•˜๋Š” ๋ฒ•์€ ๋ฐฐ์šฐ์ง€ ์•Š์•˜๋‹ค.
    • input์€ uncontrolled๋ผ๊ณ  ์•Œ๋ ค์ง
    • ๊ทธ๋ง์€ ์ฆ‰, ์—ฌ๊ธฐ input์˜ value๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ†ต์ œํ•  ์ˆ˜ ์—†๋‹ค.
  • useState๋Š” array๋ฅผ ์ œ๊ณตํ•œ๋‹ค ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ฒซ๋ฒˆ์งธ element๊ฐ€ ํ˜„์žฌ์˜ ๊ฐ’์ด ๋œ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ element์—” minutes๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ๋Š” modifier(setMinutes) ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.
    • ๋‘ ๋ฒˆ์งธ๋Š” value๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , component๋ฅผ ์ƒˆ๋กœ๊ณ ์นจ ํ•  ๋•Œ ์“ฐ๋Š” ํ•จ์ˆ˜์ด๋‹ค.
  • ์ด์ œ value๋ฅผ input์—๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • state์— ์žˆ๋‹ค๋Š” ๋ง์ด
  • ํ•˜๊ณ  ์‹ถ์€ ๊ฑฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ๊ฐ’์„ ์ž…๋ ฅํ•  ๋•Œ๋งˆ๋‹ค ์ด value๋ฅผ ์—…๋Žƒ์‹œํ‚ค๋Š” ๊ฑฐ๋‹ค.
    • ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๊ณ  ์žˆ๋Š” ๊ทธ ์ด๋ฒคํŠธ๋Š” ๋ฐ”๋กœ “change”์ด๋‹ค.
    • input์˜ value๋Š” state์˜ value์™€ ๊ฐ™์•„์ง€๋Š” ์…ˆ์ด๋‹ค.
  • input์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธธ ๋•Œ๋งˆ๋‹ค ๊ทธ ๋ณ€ํ™”๋ฅผ ๋ฆฌ์Šค๋‹ ํ•˜๊ณ  ์‹ถ๋‹ค.
    • ๋ณ€ํ™”๋ž€, ์‚ฌ์šฉ์ž๊ฐ€ input์— ๋ญ”๊ฐ€๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฑธ ๋งํ•œ๋‹ค.
    • onChange๋ผ๋Š” event๋ฅผ ๋ฆฌ์Šค๋‹ํ•  ๊ฑฐ๋‹ค.
    • ์ „์— ๋ฒ„ํŠผ์—์„œ onClick์„ ๋ฆฌ์Šค๋‹ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ
    • input์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋ฉด, onChange ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด์ค„๊ฑฐ๋‹ค.
  • ์ด input์˜ ์ž…๋ ฅ๊ฐ’์„ ์•Œ๊ณ  ์‹ถ๋‹ค.
    • label์„ input์— ์—ฐ๊ฒฐํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ
    • input์€ id๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • Synehetic Event(ํ•ฉ์„ฑ ์ด๋ฒคํŠธ)๋ผ๋Š”๊ฒŒ ๋œฌ๋‹ค.
    • ์ด์œ : React JS๊ฐ€ ๊ฐ€์งœ event๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
    • ์–˜๋„ค๋Š” event๋ฅผ ์ตœ์ ํ™” ์‹œํ‚จ๋‹ค.
    • ์›๋ž˜์˜ event(native event) native JavaScript event (๋‚ด๋ถ€์— )
      • ์š”์ง€๋Š” ์šฐ๋ฆฌ๊ฐ€ event์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์•ˆ์— ๋‚ด์šฉ์—์„œ ์ค‘์š”ํ•œ๊ฑฐ๋Š” target์ด๋‹ค.
      • target์ด๋ž€ ๋ฐฉ๊ธˆ ๋ฐ”๋€ input์„ ๋งํ•œ๋‹ค.
      • value์— ๋„๋‹ฌํ•œ๋‹ค.
      • ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผํ•˜๋Š”๊ฑด ์–ด๋–ค ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚ฌ๋‚˜ ์ซ“์•„๊ฐ€๋Š” ๊ฑฐ๋‹ค.
      • event.target.value ์ˆœ์„œ
      • document.getelement ์–ด์ฉŒ๊ตฌ ํ•  ํ•„์š” 

3.6 State Practice part One

  • onChange์˜ ์ฃผ์š”์—…๋ฌด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ ์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.
  • event๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•ด์ฃผ๊ณ  ,UI์— ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ ํ•˜๋‚˜
  • ์ •๋ฆฌํ•˜๋ฉด ์ด state๋ฅผ 60์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋ณด์—ฌ์ค€๋‹ค.
  • ์ƒˆ๋กœ ์—…๋ฐ์ดํŠธ ๋œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์ด ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ๋‹ค์‹œ ํ•œ ๋ฒˆ rendered ๋œ๋‹ค

3.7 State Practice part Two

  • flip (๋‹จ์œ„ ๋ณ€ํ™˜์„ ๋’ค์ง‘์–ด๋ณด๋Š” ํ•จ์ˆ˜(flip function)
  • ์ผ๋ฐ˜์ ์ธ JavaScript ์กฐ๊ฑด๋ฌธ์ด๋‹ค.
728x90
๋ฐ˜์‘ํ˜•