[React] State & Props ์ •๋ฆฌ๐Ÿงน

TATAยท2023๋…„ 1์›” 27์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
4/32

โœ”๏ธ State

state๋Š” ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”
๋…๋ฆฝ์ ์ธ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ „์—ญ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

โ—๏ธ์ฐธ๊ณ ) useState์˜ ์ „๋‹ฌ์ธ์ž๋Š” ํ•˜๋‚˜๋งŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿงฝ ๊ธฐ๋ณธ ๊ตฌ์กฐ

// ๊ธฐ๋ณธ ๊ตฌ์กฐ
const [state, setState] = useState(์ดˆ๊ธฐ๊ฐ’);

// ์œ„ ์ฝ”๋“œ๋ฅผ ํ’€์–ด ์“ฐ๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
const state = React.useState(์ดˆ๊ธฐ๊ฐ’);
console.log(state[0]) // ์ดˆ๊ธฐ๊ฐ’
console.log(state[1]) // setState(์›ํ•˜๋Š”๊ฐ’)


๐Ÿงฝ ์ฃผ์˜์ 

1๏ธโƒฃ ์ง์ ‘ state๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

const [state, setState] = useState("");
state = "TATA"
//โ—๏ธ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋จโ—๏ธ

2๏ธโƒฃ state๋Š” ๋น„๋™๊ธฐ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

const [cnt, setCnt] = useState(0);

setCnt(cnt + 1);
setCnt(cnt + 1);
setCnt(cnt + 1);
// 1์ด ๋‚˜์˜ฌ ์ˆ˜๋„, 2๋‚˜ 3์ด ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ์Œ.

// ์•„๋ž˜์ฒ˜๋Ÿผ ํ•จ์ˆ˜ ์ธ์ž๋กœ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๊ฒฐ ๊ฐ€๋Šฅ.
setCnt((cnt) => cnt + 1);
setCnt((cnt) => cnt + 1);
setCnt((cnt) => cnt + 1);
// 3์ด ์ถœ๋ ฅ

๐Ÿงฝ ์˜ˆ์‹œ

1๏ธโƒฃ input

function NameForm() {
  const [name, setName] = useState("");

  const handleChange = (e) => {
    setName(e.target.value);
  }
  
  const handleClick = () => {
    alert(name);
  };

  return (
    <div>
      <input type="text" value={name} onChange={handleChange}></input>
      <button onClick={handleClick}>Button</button>
      <h1>{name}</h1>
    </div>
  );
};

2๏ธโƒฃ select

function SelectExample() {
  const [choice, setChoice] = useState("apple");

  const fruits = ["apple", "orange", "pineapple", "strawberry", "grape"];
  const options = fruits.map((fruit) => {
    return <option value={fruit}>{fruit}</option>;
  });
  const handleFruit = (event) => {
    setChoice(event.target.value)
  };

  return (
    <div className="App">
      <select onChange={handleFruit}>{options}</select>
      <h3>You choose {choice}</h3>
    </div>
  );
}

โœ”๏ธ Props

props๋ž€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ
์ „๋‹ฌํ•ด์ฃผ๋Š” ๋ฐ์ดํ„ฐ property(๊ฐ์ฒด, ํ‚ค-๊ฐ’)์ด๋‹ค.

๐Ÿงฝ ๊ธฐ๋ณธ ๊ตฌ์กฐ

function Parent() {
  return (
    <div className="parent">
      <h1>I'm the parent</h1>
      <Child text={"I'm the eldest child"} />
      <Child text={"I'm the second child"} />
    </div>
  );
}

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

๐Ÿงฝ props.children

์—ฌ๋Š” ํƒœ๊ทธ์™€ ๋‹ซ๋Š” ํƒœ๊ทธ์˜ ์‚ฌ์ด์— value๋ฅผ ๋„ฃ์–ด props.children๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

function Parent() {
  return (
    <div className="parent">
        <h1>I'm the parent</h1>
        <Child>I'm the eldest child</Child>
    </div>
  );
};

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

๐Ÿงฝ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น

const Child = (props) => <span>{props.text}</span>

// ์œ„ ์ฝ”๋“œ๋ฅผ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹นํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
const Child = ({ text }) => <span>{text}</span>

๐Ÿงฝ style ๋„ฃ๋Š” ๋ฐฉ๋ฒ•

const Child = (props) => <span style={props.style}>{props.text}</span>

// ์นด๋ฉœ์ผ€์ด์Šค๋กœ ์จ์•ผ ํ•œ๋‹ค.
<Child text={"TATA"} style={{ fontSize: '16px'}}/>

๐Ÿงฝ ์Šคํ”„๋ ˆ๋“œ ํ™œ์šฉ ์˜ˆ์‹œ

const Hello = (props) => <div>{props.name}</div>

function Say() {
  const props = {
    name: "walli"
  };
  return <Hello {...props} />;
}

๐Ÿงฝ ์ฃผ์˜์ 

1๏ธโƒฃ props๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๋‹ค.

ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋‚˜ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ ๋ชจ๋‘ ์ปดํฌ๋„ŒํŠธ์˜ ์ž์ฒด props๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
๋ชจ๋“  React์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์˜ props๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋ฐ˜๋“œ์‹œ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

// ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ด๋‹ค.
function add(a, b){
    return a + b;
}

// ์•„๋ž˜๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
function add(a, b){
    return a += b;
}

๐Ÿ”ฅState vs Props

โ–ท State
์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์„ ์–ธ๋˜๊ณ , ์ง์ ‘ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋‹ค.(์™ธ๋ถ€์— ๊ณต๊ฐœ ์•ˆํ•จ)
โ“State๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜์š”?
์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ๊ฒƒ๋“ค
(ex. ์ฒดํฌ๋ฐ•์Šค์˜ ์ฒดํฌ ๊ฐ’, ๋ฆฌ์ŠคํŠธ ๊ฐ’, ํ…์ŠคํŠธ๋ฐ•์Šค ์•ˆ์˜ ํ…์ŠคํŠธ ๋“ฑ๋“ฑ)

โ–ท Props
์ฝ๊ธฐ ์ „์šฉ์ด๊ธฐ์— State์ฒ˜๋Ÿผ ๋ณ€ํ•  ์ˆ˜ ์—†๋‹ค.
์ƒ์†๋ฐ›์€ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

profile
๐Ÿพ

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