๐Ÿ–ฅFrontEnd/React

TIL) ๋ฆฌ์•กํŠธ State & Props ์ดํ•ดํ•˜๊ธฐ

hellohailie 2022. 6. 8. 23:31

React์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ธ State์™€ Props

 

State์™€ Props ์ฐจ์ด

Props: ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’ (์ธ์ž์™€ ๊ฐ™์ด ๋„˜๊ฒจ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.) ํ•จ๋ถ€๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†๋Š” ์ฝ๊ธฐ ์ „์šฉ(read-only) ๊ฐ์ฒด

State: ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๋ณ€ํ™”ํ•˜๋Š” ๊ฐ’

 

 

์–ด๋–ค ๊ฒƒ์ด State์™€ Props์— ์ ํ•ฉํ• ๊นŒ?

์ด๋ฆ„ / Props

์„ฑ๋ณ„ / Props

๋‚˜์ด / State (๋งค๋…„ ๋ฐ”๋€œ)

ํ˜„์žฌ ์‚ฌ๋Š” ๊ณณ / State (์ด์‚ฌํ• ๋•Œ๋งˆ๋‹ค ๋ฐ”๋€œ)

์ทจ์—… ์—ฌ๋ถ€ / State (๋‚ด ์ƒํƒœ์— ๋”ฐ๋ผ ๋ฐ”๋€œ)

๊ฒฐํ˜ผ/ ์—ฐ์•  ์—ฌ๋ถ€ / State (๋‚ด ์ƒํƒœ์— ๋”ฐ๋ผ ๋ฐ”๋€œ)

Toggle Switch / State (์Šค์œ„์น˜๋ฅผ on/off ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋ฐ”๋€œ // isOn:true, isOn:false)

 


Props์˜ ํŠน์ง• 

- ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ(property)์„ ์˜๋ฏธํ•œ๋‹ค. 

- ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์™ธ๋ถ€(๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ(์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ))๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์ด๊ณ , ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ€์ง„ ์†์„ฑ์— ํ•ด๋‹นํ•œ๋‹ค. 

- props๋กœ ์–ด๋–ค ํƒ€์ž…์˜ ๊ฐ’๋„ ๋„ฃ์–ด ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก props๋Š” ๊ฐ์ฒด์˜ ํ˜•ํƒœ์ด๋‹ค. 

- props๋Š” ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋ณ€๊ฒฝ๋ถˆ๊ฐ€!!

 

- ์ดํ•ด ํ•„์š” React ์ปดํฌ๋„ŒํŠธ๋Š” JavaScript ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค๋กœ, props๋ฅผ ํ•จ์ˆ˜์˜ ์ „๋‹ฌ์ธ์ž(arguments)์ฒ˜๋Ÿผ ์ „๋‹ฌ๋ฐ›์•„ ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ™”๋ฉด์— ์–ด๋–ป๊ฒŒ ํ‘œ์‹œ๋˜๋Š”์ง€๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ตœ์ดˆ ๋ Œ๋”๋ง ๋  ๋•Œ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์€ ์ดˆ๊นƒ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

Props ์‚ฌ์šฉ๋ฐฉ๋ฒ•

  1. ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’(data)๊ณผ ์†์„ฑ์„ ์ •์˜ํ•œ๋‹ค.
  2. props๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •์˜๋œ ๊ฐ’๊ณผ ์†์„ฑ์„ ์ „๋‹ฌํ•œ๋‹ค.
  3. ์ „๋‹ฌ๋ฐ›์€ props๋ฅผ **๋ Œ๋”๋งํ•œ๋‹ค.

** ๋ Œ๋”๋ง์ด๋ž€ HTML, CSS, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋“ฑ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๋ฌธ์„œ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ถœ๋ ฅ๋˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค.

์ฆ‰, ํ™”๋ฉด์— ํ‘œ์‹œํ•  ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ๋œปํ•œ๋‹ค.

 

 


state  ๋‹ค๋ฃจ๊ธฐ

<useState ์‚ฌ์šฉ>

1. React๋กœ๋ถ€ํ„ฐ useState ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

import { useState } from "react";

2. useState ๋ฅผ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ํ˜ธ์ถœํ•˜๊ธฐ

์ผ๋ฐ˜์ ์ธ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋๋‚  ๋•Œ ์‚ฌ๋ผ์ง€์ง€๋งŒ, state ๋ณ€์ˆ˜๋Š” React์— ์˜ํ•ด ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋„ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค. 

 

์•„๋ž˜ ์˜ˆ์‹œ์˜ isChecked, setIsChecked ๋Š” useState ์˜ ๋ฆฌํ„ด๊ฐ’์„ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹นํ•œ ๋ณ€์ˆ˜์ด๋‹ค.

 

๐Ÿ‘‡ useState ๋ฌธ๋ฒ• ์˜ˆ์‹œ

function CheckboxExample() {
// ์ƒˆ๋กœ์šด state ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , ์ด๊ฒƒ์„ isChecked ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค๋ผ๋Š” ๋œป
  const [isChecked, setIsChecked] = useState(false);

 

๐Ÿ‘‡ useState ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ์˜ˆ์‹œ

function CheckboxExample() {
  // 1๋ฒˆ ์ฝ”๋“œ๋ฅผ ํ’€์–ด์“ฐ๋ฉด
  const [isChecked, setIsChecked] = useState(false); // 1๋ฒˆ

  //...

  // 2๋ฒˆ ์ฝ”๋“œ์™€ ๊ฐ™๋‹ค.
  const stateHookArray = useState(false); // 2๋ฒˆ
  const isChecked = stateHookArray[0];
  const setIsChecked = stateHookArray[1];
}

 

useState ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, ๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ ์š”์†Œ๋Š” ํ˜„์žฌ state ๋ณ€์ˆ˜์ด๊ณ , 1๋ฒˆ์งธ ์š”์†Œ๋Š” ์ด ๋ณ€์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์ด๋‹ค. useState ์˜ ์ธ์ž๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฐ’์€ state์˜ ์ดˆ๊นƒ๊ฐ’์ด๋‹ค.

const [state ์ €์žฅ ๋ณ€์ˆ˜, state ๊ฐฑ์‹  ํ•จ์ˆ˜] = useState(์ƒํƒœ ์ดˆ๊ธฐ ๊ฐ’);

function CheckboxExample() {
  const [isChecked, setIsChecked] = useState(false);
  • isChecked : state๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜
  • setIsChecked : state isChecked ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜
  • useState : state hook
  • false : state ์ดˆ๊นƒ๊ฐ’

 

์ด state ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด JSX ์—˜๋ฆฌ๋จผํŠธ ์•ˆ์— ์ง์ ‘ ๋ถˆ๋Ÿฌ์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” isChecked ๊ฐ€ boolean ๊ฐ’์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— true or false ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋ณด์ด๋„๋ก ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿ‘‡ JSX์—์„œ ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ์˜ˆ์‹œ

<span>{isChecked ? "Checked!!" : "Unchecked"}</span>

 


<state ๊ฐฑ์‹ ํ•˜๊ธฐ>

  • state๋ฅผ ๊ฐฑ์‹ ํ•˜๋ ค๋ฉด state ๋ณ€์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์ธ setIsChecked ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

๐Ÿ‘‡ ์ฒดํฌ๋ฐ•์Šค ์ปดํฌ๋„ŒํŠธ ์˜ˆ์‹œ

์‚ฌ์šฉ์ž๊ฐ€ ์ฒดํฌ๋ฐ•์Šค ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด onChange ์ด๋ฒคํŠธ๊ฐ€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜์ธ handleChecked ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ์ด ํ•จ์ˆ˜๊ฐ€ setIsChecked ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. setIsChecked ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ํ˜ธ์ถœ๋œ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ isChecked ๋ณ€์ˆ˜๊ฐ€ ๊ฐฑ์‹ ๋˜๋ฉฐ, React๋Š” ์ƒˆ๋กœ์šด isChecked ๋ณ€์ˆ˜๋ฅผ CheckboxExample ์ปดํฌ๋„ŒํŠธ์— ๋„˜๊ฒจ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋ง ํ•œ๋‹ค.

function CheckboxExample() {
  const [isChecked, setIsChecked] = useState(false);

  const handleChecked = (event) => {
    setIsChecked(event.target.checked);
  };

  return (
    <div className="App">
      <input type="checkbox" checked={isChecked} onChange={handleChecked} />
      <span>{isChecked ? "Checked!!" : "Unchecked"}</span>
    </div>
  );
}

 


import React, { useState } from "react";
import "./styles.css";

function CheckboxExample() {
  console.log("rerendered?");
  const [isChecked, setIsChecked] = useState(false);

  const handleChecked = (event) => {
    setIsChecked(event.target.checked);
  };

  return (
    <div className="App">
      <input type="checkbox" checked={isChecked} onChange={handleChecked} />
      <span>{isChecked ? "Checked!!" : "Unchecked"}</span>
    </div>
  );
}

export default CheckboxExample;

 

์ฃผ์˜!

 

React state๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์ƒํƒœ ๋ณ€๊ฒฝ ํ•จ์ˆ˜ ์‚ฌ์šฉ์€ React์™€ ๊ฐœ๋ฐœ์ž์˜ ์•ฝ์†์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง€์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๊ฐ•์ œ๋กœ ๋ณ€๊ฒฝ์„ ์‹œ๋„ํ•˜๋ฉด, ๋ฆฌ๋ Œ๋”๋ง์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๊ฑฐ๋‚˜, state๊ฐ€ ์ œ๋Œ€๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.

 


React์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ(์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง; Event handling)

  • DOM์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๋‹ค.
  • React ์—์„œ ์ด๋ฒคํŠธ๋Š” ์นด๋ฉœ ์ผ€์ด์Šค(camelCase)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 
  • JSX๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋กœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜(์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ; Event handler)๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. 

๐Ÿ‘‡ ๋ฆฌ์•กํŠธ์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

<button onClick={handleEvent}>Event</button>

 

๐Ÿ‘‡ HTML์—์„œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

<button onclick="handleEvent()">Event</button>

<React ์—์„œ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฒคํŠธ>

onChange

React ์—์„œ๋Š” <input> <textarea> <select>์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ์ž…๋ ฅ๊ฐ’์„ ์ผ๋ฐ˜์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ์˜ state ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค. 

onChange ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด e.target.value ๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ ๊ฐ์ฒด์— ๋‹ด๊ฒจ์žˆ๋Š” input ๊ฐ’์„ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ return ๋ฌธ ์•ˆ์˜ input ํƒœ๊ทธ์— value ์™€ onChange ๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค. onChange ๋Š” input ์˜ ํ…์ŠคํŠธ๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์ด๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด handleChange ํ•จ์ˆ˜๊ฐ€ ์ž‘๋™ํ•˜๋ฉฐ, ์ด๋ฒคํŠธ ๊ฐ์ฒด์— ๋‹ด๊ธด input ๊ฐ’์„ setState ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด state ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.

 

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

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

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

 

onClick

onClick ์ด๋ฒคํŠธ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญ์ด๋ผ๋Š” ํ–‰๋™์„ ํ•˜์˜€์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์ด๋‹ค.

๋ฒ„ํŠผ์ด๋‚˜ <a> tag ๋ฅผ ํ†ตํ•œ ๋งํฌ ์ด๋™ ๋“ฑ๊ณผ ๊ฐ™์ด ์ฃผ๋กœ ์‚ฌ์šฉ์ž์˜ ํ–‰๋™์— ๋”ฐ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ˜์‘ํ•ด์•ผ ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฒคํŠธ์ด๋‹ค.

 

 

๐Ÿ‘‡ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ input tag ์— ์ž…๋ ฅํ•œ ์ด๋ฆ„์ด alert์„ ํ†ตํ•ด ์•Œ๋ฆผ ์ฐฝ์ด ํŒ์—… ๋œ๋‹ค.

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

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

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

โžฅ onClick ์ด๋ฒคํŠธ์— alert(name) ํ•จ์ˆ˜๋ฅผ ๋ฐ”๋กœ ํ˜ธ์ถœํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ ํ•จ์ˆ˜ ์ž์ฒด๊ฐ€ ์•„๋‹Œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ๊ฒฐ๊ณผ๊ฐ€ onClick ์— ์ ์šฉ๋œ๋‹ค. ๋•Œ๋ฌธ์— ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ๊ฐ€ ์•„๋‹Œ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ์— alert ์ด ์‹คํ–‰๋˜๊ณ  ๋”ฐ๋ผ์„œ ๊ทธ ๊ฒฐ๊ณผ์ธ undefined (ํ•จ์ˆ˜๋Š” ๋ฆฌํ„ด ๊ฐ’์ด ์—†์„ ๋•Œ undefined ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.) ๊ฐ€ onClick ์— ์ ์šฉ๋˜์–ด ํด๋ฆญํ–ˆ์„ ๋•Œ ์•„๋ฌด๋Ÿฐ ๊ฒฐ๊ณผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

 

๐Ÿ‘‰ onClick ์ด๋ฒคํŠธ์— ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ๋•Œ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฆฌํ„ด๋ฌธ ์•ˆ์—์„œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๋ฆฌํ„ด๋ฌธ ์™ธ๋ถ€์—์„œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ ํ›„ ์ด๋ฒคํŠธ์— ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ, ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘ arrow function ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜์—ฌ์•ผ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ€์ง„ state์— ํ•จ์ˆ˜๋“ค์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

// ํ•จ์ˆ˜ ์ •์˜ํ•˜๊ธฐ

return (
  <div>
	...
    <button onClick={() => alert(name)}>Button</button>
	...
  </div>
  );
};

// ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ

const handleClick = () => {
  alert(name);
};

return (
  <div>
      ...
    <button onClick={handleClick}>Button</button>
      ...
  </div>
  );
};

 

 

  • ์ปดํฌ๋„ŒํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ ๋ฐ”๊นฅ์—์„œ props๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋งˆ์น˜ ์ธ์ž(arguments) ํ˜น์€ ์†์„ฑ(attributes)์ฒ˜๋Ÿผ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ฃผ์ฒด๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋œ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ํ•˜ํ–ฅ์‹(top-down) ์ž„์„ ์˜๋ฏธํ•œ๋‹ค.
  • ๋ฆฌ์•กํŠธ๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„(one-way data flow)!!

 

๐Ÿ˜ƒํ˜น์‹œ๋‚˜ ์ž˜๋ชป๋œ ๊ฐœ๋… ์ „๋‹ฌ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ €์˜ ์„ฑ์žฅ์— ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค๐Ÿค“