๐Ÿ“ ์ปดํฌ๋„ŒํŠธ์˜ setState๋ฅผ props๋กœ ์ „๋‹ฌํ•˜์ง€ ๋ง์•„์•ผ ํ•  ์ด์œ 

saeyoung.devยท2024๋…„ 7์›” 1์ผ

React

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

โœจ ์ธ์‚ฌ์ดํŠธ
๋ฆฌ์•กํŠธ ๊ฐ•์˜๋ฅผ ์žฌ์ˆ˜๊ฐ•ํ•˜๋ฉฐ ์ „์ฒด ๊ฐœ๋…๋“ค์— ๋Œ€ํ•ด ๋ณต๊ธฐํ•˜๋ฉฐ ์–ป์€ ์ธ์‚ฌ์ดํŠธ.
๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ setState๋ฅผ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— props๋กœ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค์‹œ ํ•œ๋ฒˆ ์ƒ๊ฐํ•˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค.

โœ… ์žŠ์ง€ ๋ง์ž!
setState๋ฅผ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•˜๋Š”๊ฑด ์™ธ๋ถ€์— ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์˜ ์ฃผ๋„๊ถŒ์„ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ๊ฐ์‹ธ์„œ ๋„˜๊ธฐ๊ณ  ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ทธ๊ฒƒ์„ ์ ์ ˆํ•œ ์‹œ์ ์— ํ˜ธ์ถœ๋งŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์–ด!๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ํ˜ธ์ถœํ•˜๋Š” ์ž…์žฅ์—์„œ๋Š” ์„ธ๋ถ€ ๋กœ์ง์„ ์•Œ๊ธฐ ์–ด๋ ค์›€

์ปดํฌ๋„ŒํŠธ ๋‚ด ๋ฐ์ดํ„ฐ์˜ ์ฃผ๋„๊ถŒ์„ ๊ทธ๋Œ€๋กœ ์ง€์ผœ๋‚ด๋ฉด์„œ, ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ํ˜‘๋ ฅ

import { useState } from 'react';
import './App.css';
import Counter from './components/Counter';

export default function AppCounter() {
  const [count, setCount] = useState(0);
  const handleTotal = () => {
    setCount((prev) => prev + 1);
  }; // --> ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ ์ œ์–ด๊ถŒ ํ†ต์ œ
  return (
    <div className='container'>
      <span className='banner'>
        Total : {`${count} ${count > 10 ? '๐Ÿ”ฅ' : '๐Ÿชด'}`}
      </span>
      <div className='counters'>
        <Counter total={count} onClick={handleTotal} />
        <Counter total={count} onClick={handleTotal} />
      </div>
    </div>
  );
}
import React, { useState } from 'react';

export default function Counter({ total, onClick }) {
  const [count, setCount] = useState(0);
  const handleClick = () => {
    setCount((prev) => prev + 1);
    onClick(); // --> ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ props๋กœ ์ „๋‹ฌ
  };
  return (
    <div className='counter'>
      <p>
        <span className='number'>{count}</span>
        <small>/ {total}</small>
      </p>
      <button className='button' onClick={handleClick}>
        ADD
      </button>
    </div>
  );
}

๐Ÿ’ฉ ์ฒ˜์Œ ์ž‘์„ฑํ–ˆ๋˜ ์ฝ”๋“œ

export default function Counter({ total, setTotalCount }) {
  const [count, setCount] = useState(0);
  const handleClick = () => {
    setCount((prev) => prev + 1);
    setTotalCount((prev) => prev + 1); // setState๋ฅผ ๋ฐ”๋กœ ์ „๋‹ฌ
  };

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