[React] ๐ŸŽฃState ์ƒํƒœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ

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

React

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

React์—์„œ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•œ ๊ฐ€์ง€ ์ผ์„ ํ•˜๋Š”๊ฒŒ ์ด์ƒ์ ์ธ ์›์น™์ด๋‹ค.
๋˜ํ•œ ์ƒํƒœ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณต์žกํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ƒํƒœ๋Š” ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

โ–ท State ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ

๐ŸŽฃ State ์ƒํƒœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ๋ž€?

๋งŒ์ผ ํ•˜๋‚˜์˜ ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‘ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค๋ฉด,
์ด ๋‘ ์ž์‹(๋‘ ์ปดํฌ๋„ŒํŠธ)์˜ ๊ณตํ†ต ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์— ์ƒํƒœ๋ฅผ ์œ„์น˜์‹œ์ผœ์•ผ ํ•œ๋‹ค.

โ—๏ธ์ฐธ๊ณ ) ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๊ฐ€ state๋กœ๋ถ€ํ„ฐ ์™”๋Š”์ง€, ํ•˜๋“œ์ฝ”๋”ฉ์œผ๋กœ ์ž…๋ ฅ๋œ ๋‚ด์šฉ์ธ์ง€ ์•Œ์ง€ ๋ชปํ•œ๋‹ค.

<FormattedDate date={this.state.date} />
  
-----
/* FormattedDate */
function FormattedDate(props) {
  return <h2>It is {props.date.toLocaleTimeString()}.</h2>;
}

๐ŸŽฃ ์‚ฌ์šฉ ์˜ˆ์‹œ

์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ๋ณ€๊ฒฝ ํ•จ์ˆ˜๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•˜๋ฉด,
์ด ํ•จ์ˆ˜๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‹คํ–‰ํ•œ๋‹ค.

import React, { useState } from "react";

export default function ParentComponent() {
  const [value, setValue] = useState("๋‚  ๋ฐ”๊ฟ”์ค˜!");

  const handleChangeValue = () => {
    // ๊ฐ’ ๋ณ€๊ฒฝ
    setValue("์™„์ „ํžˆ ๋‹ฌ๋ผ์ง„ ๊ฐ’");
  };

  return (
    <div>
      <div>๊ฐ’์€ {value} ์ž…๋‹ˆ๋‹ค</div>
	  // ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ์˜ props.handleButtonClick์—
      // handleChangeValueํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์คŒ.
      <ChildComponent handleButtonClick={handleChangeValue}/>
    </div>
  );
}

function ChildComponent({ handleButtonClick }) {
  const handleClick = () => {
    // ํ•จ์ˆ˜ ํ˜ธ์ถœ
    handleButtonClick()
  };

  return <button onClick={handleClick}>๊ฐ’ ๋ณ€๊ฒฝ</button>;
} // ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด "๋‚  ๋ฐ”๊ฟ”์ค˜!" => "์™„์ „ํžˆ ๋‹ฌ๋ผ์ง„ ๊ฐ’"์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.


---------------------------
  
function ParentComponent() {
  const [value, setValue] = useState("๋‚  ๋ฐ”๊ฟ”์ค˜!");

  const handleChangeValue = (newValue) => {
    // ๋ณ€๊ฒฝ ๊ฐ’์œผ๋กœ ํ•จ์ˆ˜ ์ธ์ž๋ฅผ ๋ฐ›์Œ
    setValue(newValue);
  };

  // ...์ƒ๋žต...
}

function ChildComponent({ handleButtonClick }) {
  const handleClick = () => {
    // ์ธ์ž ๊ฐ’์„ ๋„ฃ์€ ์ƒํƒœ ํ˜ธ์ถœ
    handleButtonClick('์ž์‹์ด ์›ํ•˜๋Š” ๊ฐ’์„ ๋„˜๊ฒจ์ค„๊ฒŒ')
  }

  return (
    <button onClick={handleClick}>๊ฐ’ ๋ณ€๊ฒฝ</button>
  ) // ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด "๋‚  ๋ฐ”๊ฟ”์ค˜!" => "์ž์‹์ด ์›ํ•˜๋Š” ๊ฐ’์„ ๋„˜๊ฒจ์ค„๊ฒŒ"๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.
}

โ“ State๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ?
๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ props๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋˜๋Š” ๊ฒฝ์šฐ,
์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ(์ •์ ์ผ ๋•Œ),
์ปดํฌ๋„ŒํŠธ ์•ˆ์˜ ๋‹ค๋ฅธ state๋‚˜ props๋ฅผ ๊ฐ€์ง€๊ณ 
๊ณ„์‚ฐ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์—๋Š” State๊ฐ€ ์•„๋‹ˆ๋‹ค. (ex. ํ•„ํ„ฐ๋ง๋œ ๋ชฉ๋ก์€ state๊ฐ€ ์•„๋‹ˆ๋‹ค.)

๐Ÿ“š ๋” ๋งŽ์€ ์ดํ•ด๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?
๐Ÿ‘‰ (๊ณต์‹๋ฌธ์„œ)State์™€ ์ƒ๋ช…์ฃผ๊ธฐ ์ค‘ ๋ฐ์ดํ„ฐ๋Š” ์•„๋ž˜๋กœ ํ๋ฅธ๋‹ค.
๐Ÿ‘‰ (๊ณต์‹๋ฌธ์„œ)React๋กœ ์ƒ๊ฐํ•˜๊ธฐ

profile
๐Ÿพ

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