[React] state, useState

3Β·2024λ…„ 1μ›” 22일

FE

λͺ©λ‘ 보기
2/2
post-thumbnail

πŸ”— https://react.dev/learn/state-a-components-memory

State

state

μ›ΉνŽ˜μ΄μ§€μ—μ„œ μƒν˜Έμž‘μš©μœΌλ‘œ ν™”λ©΄μ˜ λ‚΄μš©μ„ λ³€κ²½ν•΄μ•Ό ν•˜λŠ” 경우
양식 μž…λ ₯ν•˜λ©΄ μž…λ ₯ ν•„λ“œκ°€ μ—…λ°μ΄νŠΈ λ˜κ±°λ‚˜, 'λ‹€μŒ'λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ ν‘œμ‹œλ˜λŠ” λ‚΄μš©μ΄ λ³€κ²½λ˜κ±°λ‚˜, 'ꡬ맀'λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ μž₯λ°”κ΅¬λ‹ˆμ— λ‹΄κΈ°κ²Œ λ˜λŠ” λ“±
μ»΄ν¬λ„ŒνŠΈλŠ” ν˜„μž¬μ˜ μž…λ ₯ κ°’, λ‚΄μš©, μž₯λ°”κ΅¬λ‹ˆ 등을 κΈ°μ–΅ν•΄μ•Ό ν•œλ‹€!
Reactμ—μ„œλŠ” μ΄λŸ¬ν•œ μ’…λ₯˜μ˜ κ΅¬μ„±μš”μ†Œλ³„ λ©”λͺ¨λ¦¬λ₯Ό state 라 λΆ€λ₯Έλ‹€.

일반 λ³€μˆ˜λ‘œ μΆ©λΆ„ν•˜μ§€ μ•Šμ€ 경우 μ‚¬μš©

import { sculptureList } from './data.js';

export default function Gallery() {
  let index = 0;

  function handleClick() {
    index = index + 1;
  }

  let sculpture = sculptureList[index];
  return (
    <>
      <button onClick={handleClick}>
        Next
      </button>
      <h2>
        <i>{sculpture.name} </i> 
        by {sculpture.artist}
      </h2>
      <h3>  
        ({index + 1} of {sculptureList.length})
      </h3>
      <img 
        src={sculpture.url} 
        alt={sculpture.alt}
      />
      <p>
        {sculpture.description}
      </p>
    </>
  );
}

μ½”λ“œμ—μ„œ handleClick() 이벀트 ν•Έλ“€λŸ¬λŠ” indexλΌλŠ” μ§€μ—­ λ³€μˆ˜λ₯Ό λ³€κ²½ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.

λ‹€λ§Œ μœ„ μ½”λ“œλ‘œ μž‘μ„±λœ νŽ˜μ΄μ§€μ—μ„œλŠ” index의 λ³€ν™”λ₯Ό λ°”λ‘œ 확인할 수 μ—†λ‹€.
즉 Next λ²„νŠΌμ„ 눌러 이벀트 ν•Έλ“€λŸ¬κ°€ μž‘λ™λ˜μ–΄λ„ λ·°νŽ˜μ΄μ§€μ—μ„œλŠ” μ•„λ¬΄λŸ° λ³€ν™”κ°€ μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€.
μ΄λŠ” μ§€μ—­λ³€μˆ˜κ°€ λ‹€μŒ 두 κ°€μ§€ νŠΉμ„±μ„ κ°–κΈ° λ•Œλ¬Έμ΄λ‹€.

  1. μ§€μ—­ λ³€μˆ˜μ˜ λ³€κ²½μœΌλ‘œλŠ” λ Œλ”λ§μ΄ μžλ™μœΌλ‘œ 이루어지지 μ•ŠλŠ”λ‹€.
  2. μ§€μ—­ λ³€μˆ˜μ˜ 변경은 λ Œλ”λ₯Ό νŠΈλ¦¬κ±°ν•˜μ§€ μ•ŠλŠ”λ‹€. (λ¦¬μ•‘νŠΈλŠ” ReactλŠ” 바뀐 κ°’μœΌλ‘œ λ‹€μ‹œ λ Œλ”λ§ν•΄μ•Ό ν•œλ‹€λŠ” 것을 μΈμ‹ν•˜μ§€ λͺ»ν•œλ‹€)

useState

Destructuring

// 각 λ³€μˆ˜μ— νŠΉμ • κ°’ μ €μž₯ν•˜λŠ” 방법 

// 1. 배열에 λ„£κ³  인덱슀둜 μ ‘κ·Όν•΄ μ €μž₯ 
let num = [1,2];
let a = num[0];
let b = num[1];
// a == 1 , b == 2 

// 2. Destructuring 
let [c,d] = [1,2];
// c == 1 , d == 2

useState

useStateλŠ” const [ something, setSomething ] = useState(λ³€μˆ˜ μ΄ˆκΈ°κ°’); 의 ν˜•μ‹μœΌλ‘œ μ‚¬μš©λ˜λ©°, useStateλŠ” [something κ°’, setSomething(ν•¨μˆ˜)]을 λ°˜ν™˜ν•œλ‹€.

  1. something: state λ³€μˆ˜, 두 λ Œλ” μ‚¬μ΄μ˜ 데이터λ₯Ό μœ μ§€ν•΄μ€€λ‹€.
  2. setSomething : λ³€μˆ˜λ₯Ό μ—…λ°μ΄νŠΈν•˜κ³  Reactλ₯Ό νŠΈλ¦¬κ±°ν•΄ ꡬ성 μš”μ†Œλ₯Ό λ‹€μ‹œ λ Œλ”λ§ν•˜κ²Œ ν•΄μ£ΌλŠ” state μ„€μ • ν•¨μˆ˜(state setter function)이닀.

μ°Έκ³ )
ν†΅μƒμ μœΌλ‘œ const [ something, setSomething ] ν˜•μ‹μœΌλ‘œ λ³€μˆ˜λͺ…을 μž‘μ„±ν•œλ‹€.
λ§ˆμŒλŒ€λ‘œ μž‘μ„±ν•  수 μžˆμ§€λ§Œ, μ»¨λ²€μ…˜μ„ λ”°λ₯΄λ©΄ μ½”λ“œλ₯Ό 이해할 λ•Œ 도움이 될 것!


μ•žμ—μ„œ μž‘μ„±ν•œ μ½”λ“œμ— stateλ₯Ό μ μš©ν•˜μ—¬ 값이 변경될 λ•Œλ§ˆλ‹€ νŽ˜μ΄μ§€κ°€ λ Œλ”λ˜μ–΄ λ³€κ²½ 값을 확인할 수 μžˆλ„λ‘ μˆ˜μ •ν•΄λ³΄μž.

import { sculptureList } from './data.js';
import { useState } from 'react'; // useState import

export default function Gallery() {
//  let index = 0;
  const [index, setIndex] = useState(0);  //useState μ‚¬μš© 
  

  function handleClick() {
//    index = index + 1;
    setIndex(index + 1);
  }

const [index, setIndex] = useState(0);
indexκ°€ state λ³€μˆ˜, setIndexκ°€ state setter function이닀.


useState λ™μž‘ κ³Όμ •

const [index, setIndex] = useState(0);

μœ„ μ˜ˆμ‹œ μ½”λ“œλ₯Ό 톡해 λ™μž‘ 과정을 ν™•μΈν•΄λ³΄μž.

1. ꡬ성 μš”μ†Œκ°€ 처음으둜 λ Œλ”λœλ‹€
useState의 μ΄ˆκΈ°κ°’μœΌλ‘œ 0을 index에 μ „λ‹¬ν–ˆκΈ° λ•Œλ¬Έμ— useStateλŠ” [0, setIndex]을 λ°˜ν™˜ν•œλ‹€.
ReactλŠ” state λ³€μˆ˜μ˜ μ΅œμ‹  값인 0을 κΈ°μ–΅ν•œλ‹€.

2. stateκ°€ μ—…λ°μ΄νŠΈλœλ‹€
μœ μ €κ°€ λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄, ν•Έλ“€λŸ¬ ν•¨μˆ˜κ°€ setIndex(index+1)을 ν˜ΈμΆœν•œλ‹€. indxeκ°€ 0이기 λ•Œλ¬Έμ—, setIndex(1)이 μ μš©λ˜μ–΄ index 값이 1둜 λ³€κ²½λœλ‹€.
μ΄λŠ” Reactκ°€ index 값을 1둜 κΈ°μ–΅ν•˜κ²Œ λ§Œλ“€κ³  λ Œλ”λ₯Ό νŠΈλ¦¬κ±°ν•œλ‹€.

3. 두 번째 λ Œλ”κ°€ μ§„ν–‰λœλ‹€
ReactλŠ” [1, setIndex]λ₯Ό λ°˜ν™˜ν•œλ‹€.


profile
b3b3

0개의 λŒ“κΈ€