TIL_React State & Props

๋ฐ•์„ฑํ›ˆยท2022๋…„ 8์›” 2์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
4/8
post-thumbnail

๐Ÿ’ก Props

๋ณ€ํ•˜์ง€ ์•Š๋Š” ์™ธ๋ถ€ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ์†์„ฑ

Porps๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์œผ๋กœ์จ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐ’์„ ์ธ์ž๋กœ ๋ฐ›์•„ ๋ถˆํ•„์š”ํ•œ ๊ตฌํ˜„์„ ํ•˜์ง€์•Š๋„๋ก ํ•ด์ฃผ๋Š” ์†์„ฑ์ด๋‹ค.

๐Ÿ” Props์˜ ํŠน์ง•

  • ๊ฐ์ฒด
    : props๋กœ ์–ด๋–ค ํƒ€์ž…์˜ ๊ฐ’๋„ ๋„ฃ์–ด ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก props๋Š” ๊ฐ์ฒด ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ(์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ)๋กœ ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’
  • read-only
    : props๋Š” ์„ฑ๋ณ„, ์ด๋ฆ„์ฒ˜๋Ÿผ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์•„ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ด๋‹ค.
    ํ•จ๋ถ€๋กœ ๋ณ€๊ฒฝ๋˜๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ฝ๊ธฐ ์ „์šฉ ๊ฐ์ฒด์ธ ๊ฒƒ์ด๋‹ค.

๐Ÿ“Œ ํ˜„์—…์—์„œ์˜ Props

์œ„์—์„œ ํ™•์ธํ–ˆ๋“ฏ์ด props๋Š” ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋ฐ›์•„์˜จ๋‹ค.
๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์— ES6๋ฌธ๋ฒ•์˜ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์œผ๋กœ ๊ฐ์ฒด์—์„œ ํ•„์š”ํ•œ ๊ฐ’๋งŒ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

ํ˜„์—…์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์„ ํ™œ์šฉํ•œ ๋ฐฉ๋ฒ•์„ ๋งŽ์ด ์“ฐ๋Š” ํŽธ์ด๋‹ค.

๐Ÿ” Props ์‚ฌ์šฉ๋ฒ•

props์˜ ์‚ฌ์šฉ์ ˆ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’๊ณผ ์†์„ฑ ์ •์˜
  2. props๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •์˜๋œ ๊ฐ’๊ณผ ์†์„ฑ์„ ์ „๋‹ฌ
  3. ์ „๋‹ฌ๋ฐ›์€ props๋ฅผ ๋žœ๋”๋ง
function Parent() {
  return (
    <div className="parent">
      <h1>I'm the parent</h1>
      
      <Child text={"I'm the eldest child"} />
      
      <Child />
    </div>
  );
}

ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ(Child)์— ์ „๋‹ฌํ•  ์†์„ฑ(text)๊ณผ ๊ฐ’('I'm the eldest child') ์ •์˜

function Child(props) {

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

props๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ(Parent)์—์„œ ์ •์˜๋œ ๊ฐ’๊ณผ ์†์„ฑ์„ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.
๊ทธ๋ฆฌ๊ณ , ์ „๋‹ฌ๋ฐ›์€ props๋ฅผ htmlํƒœ๊ทธ๋กœ ๋žœ๋”๋งํ•ด์ค€๋‹ค.

๐Ÿ’ก State

์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’, ์ƒํƒœ

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” ์›นํŽ˜์ด์ง€์—์„œ ์ƒํƒœ๊ด€๋ฆฌ๋Š” ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์‡ผํ•‘๋ชฐ ์‚ฌ์ดํŠธ์˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€์—์„œ ์‚ด ๋ฌผ๊ฑด์„ ์ฒดํฌํ•˜๋Š” ์ฒดํฌ๋ฐ•์Šค์—๋„ ์ƒํƒœ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

์ฒดํฌ๊ฐ€ ๋œ ์ƒํƒœ / ์ฒดํฌ๊ฐ€ ๋˜์ง€ ์•Š์€ ์ƒํƒœ

์ฒดํฌ๊ฐ€ ๋œ ํ•ญ๋ชฉ์˜ ๊ฐ’๊ณผ ์ˆ˜๋Ÿ‰์„ ํ•ฉ์‚ฐํ•˜์—ฌ ์ตœ์ข… ๊ตฌ๋งค๊ฐ€๊ฒฉ๊ณผ ๊ตฌ๋งคํ•ญ๋ชฉ์„ ํ™”๋ฉด์— ๋ณด์—ฌ์ค€๋‹ค.
์ด์ฒ˜๋Ÿผ, ์ƒํƒœ์— ๋”ฐ๋ผ ํ™”๋ฉด์ด ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ์„ React State์˜ useState๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ” useState ์‚ฌ์šฉ๋ฒ•

๐Ÿ“Œ import

import React, { useState } from "react";

React๋กœ ๋ถ€ํ„ฐ useState๋ฅผ import ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ถˆ๋Ÿฌ์™€์ค€๋‹ค.

๐Ÿ“Œ ํ˜ธ์ถœ

const Checkbox = () => {
	const [isChecked, setIsChecked] = useState(false);
}

์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ useStateํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

์ด๋•Œ, isChecked๋Š” ์ƒํƒœ๊ฐ€ ์ €์žฅ๋  ๋ณ€์ˆ˜์ด๋‹ค.
setIsChecked๋Š” isChecked์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ด ์ค„ ์ƒํƒœ๋ณ€๊ฒฝํ•จ์ˆ˜์ด๋‹ค.

์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ isChecked, setIsChecked์— useState์˜ ๋ฆฌํ„ด๊ฐ’์„ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹นํ•˜๊ณ  ์žˆ๋‹ค.
useState์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” isChecked์˜ ์ดˆ๊ธฐ๊ฐ’์ด ๋œ๋‹ค.

๋‹ค์‹œ ์ •๋ฆฌํ•˜์ž๋ฉด,

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

๐Ÿ“Œ ์‚ฌ์šฉ

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

jsx ์—˜๋ฆฌ๋จผํŠธ ์•ˆ์— ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒํƒœ๋ณ€์ˆ˜ (isChecked)๋ฅผ ์กฐ๊ฑด์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ“Œ State ๊ฐฑ์‹  ๋ฐ Rerendering

const 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>
  );
}

state๋ฅผ ๊ฐฑ์‹ ํ•˜๋ ค๋ฉด ์ƒํƒœ๋ณ€๊ฒฝํ•จ์ˆ˜์ธ SetIsChecked๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ๋œ๋‹ค.

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด,
์ฒดํฌ๋ฐ•์Šค์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด handleChecked ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ ,
handleChecked ํ•จ์ˆ˜์—์„œ event.target.checked(์ฒดํฌ๋ฐ•์Šค์˜ ์ฒดํฌ์—ฌ๋ถ€)๊ฐ€ setIsChecked ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด isChecked ๋ณ€์ˆ˜์— ํ• ๋‹น(๊ฐฑ์‹ )๋œ๋‹ค.

isChecked ๋ณ€์ˆ˜๊ฐ€ ๊ฐฑ์‹ ๋˜๋ฉด, React๋Š” ๊ฐฑ์‹ ๋œ isChecked๋ฅผ CheckboxExample ์ปดํฌ๋„ŒํŠธ์— ๋„˜๊ฒจ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์‹œ ๋žœ๋”๋งํ•œ๋‹ค.

โ—๏ธ ์ด ๋•Œ, ๋ฐ˜๋“œ์‹œ ์ƒํƒœ๋ณ€๊ฒฝํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ๋ฆฌ๋žœ๋”๋ง์ด ๋˜๊ณ , ๊ทธ๋ƒฅ ์ง์ ‘์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด ๋ฆฌ๋žœ๋”๋ง์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

profile
ํ”„๋ก ํŠธ์—”๋“œ ํ•™์Šต์ผ์ง€

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