TIL 20: React ๊ธฐ์ดˆ - State & Props

์‚ผ์ผ๊ฐ„ ๋‚˜๋ˆ ์„œ ๋ฆฌ์•กํŠธ ๊ธฐ์ดˆ๋ฅผ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค!

ํ•˜๋ฃจ์— ๋ชจ๋“  ๋‚ด์šฉ์„ ๋ฐฐ์šฐ์ง€ ์•Š์œผ๋‹ˆ๊น ๋ฐฐ์› ๋˜ ๋‚ด์šฉ๋“ค์ด ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐ์ด ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ์ฃผ๋ง์— ๋งˆ์ € ํ•œ๋ฒˆ ์ญ‰ ํ›‘์–ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ๋‹ด์ฃผ์— HA์žˆ์–ด์„œ ์ด์™ธ์˜ ๋‚ด์šฉ๋“ค๋„ ๋” ๊ณต๋ถ€ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์•„์š”!

๊ทธ๋ž˜์„œ ์ฃผ๋ง์ด...์—†์–ด์งˆ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹คใ… 

์ผ๋‹จ ์˜ค๋Š˜์€ State์™€ Props์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

ํฌ๊ฒŒ ๋ณด๋ฉด State๋Š” ๋ณ€ํ™”ํ•˜๋Š” ์†์„ฑ์ผ ๋•Œ ์‚ฌ์šฉํ•˜๊ณ , Props๋Š” ๋ณ€ํ™”ํ•˜์ง€ ์•Š๋Š” ์†์„ฑ์ผ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

State

State์˜ ์žฅ์ ์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด HTML์ด ์ž๋™์œผ๋กœ ์žฌ๋ Œ๋”๋ง ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์ƒˆ๋กœ๊ณ ์นจ ์•ˆํ•ด๋„ ์•Œ์•„์„œ ์Šค๋ฌด์Šคํ•˜๊ฒŒ ์ž˜ ๋ Œ๋”๋ง์ด ๋ฉ๋‹ˆ๋‹ค.

state ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” useState๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import { useState } from "react"; //์ƒ๋‹จ์— useState๋ฅผ ๋ถˆ๋Ÿฌ์˜จ ํ›„
function CheckboxExample() {
  const [isChecked, setIsChecked] = useState(false); 
  const [state ์ €์žฅ ๋ณ€์ˆ˜, state ๊ฐฑ์‹  ํ•จ์ˆ˜] = useState(์ƒํƒœ ์ดˆ๊ธฐ ๊ฐ’);
   //์œ„ ๋‘ ์ค„์˜ ๋œป์€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

React state๋Š” ๊ฐ•์ œ๋กœ ๋ณ€๊ฒฝ์„ ์‹œ๋„ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

deep copy๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

Props

Props๋Š” ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์ž…๋‹ˆ๋‹ค.

ํ˜•ํƒœ๋Š” ๊ฐ์ฒด ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด State์™€ ๋‹ฌ๋ฆฌ ํ•จ๋ถ€๋กœ ๋ณ€๊ฒฝ๋˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

Props๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํฌ๊ฒŒ ์„ธ๊ฐ€์ง€ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰˜์–ด์ง‘๋‹ˆ๋‹ค.

1. ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•˜๊ณ ์žํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

<Child attribute={value} />

2. Props๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

3. ์ „๋‹ฌ๋ฐ›์€ Props๋ฅผ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

function Child(props) {
  return (
    <div className="child">
      <p>{props.text}</p>
    </div>
  );
};

 

 

์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง

DOM์—์„œ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์‹  React์—์„œ๋Š” ์ด๋ฒคํŠธ๋ฅผ ์†Œ๋ฌธ์ž ๋Œ€์‹  ์นด๋ฉœ ์ผ€์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

JSX๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ํ•จ์ˆ˜๋กœ  ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

onClick, onChange, select ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š”

1. useState๋ฅผ ํ†ตํ•ด ๋ณ€์ˆ˜์™€ ๊ฐฑ์‹ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ ,

2. ๊ฐฑ์‹ ํ•จ์ˆ˜๋ฅผ el.target.value์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ด์ค€ ํ›„,

3. return ๋ฌธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function NameForm() {
  const [name, setName] = useState(""); // 1. useState๋ฅผ ํ†ตํ•ด ๋ณ€์ˆ˜์™€ ๊ฐฑ์‹ ํ•จ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ

  const handleChange = (e) => {
    setName(e.target.value);
  } // 2. el.target.value ๋ณ€์ˆ˜ ํ• ๋‹นํ•˜๊ธฐ

  return (
    <div>
      <input type="text" value={name} onChange={handleChange}></input>
      <h1>{name}</h1>
    </div>
  )
}; // 3. Return๋ฌธ์— ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ ์šฉํ•˜๊ธฐ

'TIL > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

TIL23: [JS/Node] ๊ฐ์ฒด ์ง€ํ–ฅ JavaScript  (0) 2021.08.23
TIL 22 (1): ์›น ๊ตฌ๋™ ๋ฐฉ์‹  (0) 2021.08.21
TIL 19: React ๊ธฐ์ดˆ - SPA  (0) 2021.08.12
TIL18: React ๊ธฐ์ดˆ  (0) 2021.08.11
TIL 17: ๊ณ ์ฐจํ•จ์ˆ˜  (0) 2021.08.11