๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

react

React / ์ƒํƒœ๊ด€๋ฆฌ

 

๋ฆฌ์•กํŠธ๋Š” ์„ ์–ธ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(๋ฌด์—‡์„ ๊ฒฐ๊ณผ๋กœ ์–ป๊ณ ์ž ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ์‹)์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

๋ฌด์—‡์„ ํ™”๋ฉด์— ํ‘œํ˜„ํ• ์ง€ JSX๋ฌธ๋ฒ•์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด, JSX์— ๋“ค์–ด๊ฐ€๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ™”ํ–ˆ์„ ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งž๋Š” ํ™”๋ฉด์ด ๊ฒฐ๊ณผ๋กœ ํ‘œ์‹œ๋œ๋‹ค.

 

 

์ƒํƒœ(state)

React ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋กœ, ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ state๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

state๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ณ , ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ํ๋ฆ„์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’๋งŒ state์— ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

์•„๋ž˜๋Š” state๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์˜ˆ์‹œ๋‹ค.

function App() {
  let counter = 0;

  function increase() {
    counter++;
    console.log(counter);
  }

  function decrease() {
    counter--;
    console.log(counter);
  }
  return (
    <>
      <div>counter : {counter}</div>
      <button onClick={increase}>+</button>
      <button onClick={decrease}>-</button>
    </>
  );
}

 

๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด counter์˜ ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ฐ์†Œํ•˜๊ณ  ์žˆ์Œ์„ ์ฝ˜์†”๋กœ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ™”๋ฉด์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค.

๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ ๋ฆฌ๋ Œ๋”๋ง์œผ๋กœ ๋ณ€ํ™”ํ•œ ๊ฐ’์„ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚ด๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด state๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

useState()

React์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” Hook ์ค‘ ํ•˜๋‚˜๋กœ, ๊ธฐ๋ณธ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

const [state, setState] = useState(initialState);
// state : ํ˜„์žฌ ์ƒํƒœ ๊ฐ’
// setState : ์ƒํƒœ ๋ณ€๊ฒฝ ํ•จ์ˆ˜
// useState() : [state, setState]ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜
// initialState : ์ƒํƒœ์˜ ์ดˆ๊ธฐ๊ฐ’

 

 

์ด๋ฅผ ์‚ฌ์šฉํ•ด ์œ„์˜ ์นด์šดํ„ฐ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ํ™”๋ฉด์— ๋ Œ๋”๋ง๋˜๋„๋ก ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

function App() {
  const [counter, setCounter] = useState(0)

  function increase() {
    setCounter(counter+1);
  }

  function decrease() {
    setCounter(counter-1);
  }
  return (
    <>
      <div>counter : {counter}</div>
      <button onClick={increase}>+</button>
      <button onClick={decrease}>-</button>
    </>
  );
}

 

๋˜๋Š” ์ตœ์‹  ์ƒํƒœ๋ฅผ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์„œ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

ํ•จ์ˆ˜์˜ ์ „๋‹ฌ ์ธ์ž๋กœ ์ด์ „ ์ƒํƒœ๊ฐ’์ธ prev๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ , return๊ฐ’์œผ๋กœ prev+1์„ ํ•ด์ฃผ๋ฉด ์ด๊ฒŒ ๋‹ค์Œ ์ƒํƒœ๊ฐ’์ด ๋œ๋‹ค. 

์—ฌ๋Ÿฌ๋ฒˆ ์—ฐ์† ์—…๋ฐ์ดํŠธํ•  ๋•Œ์—๋Š” ์ด ๋ฐฉ๋ฒ•์ด ๋” ์•ˆ์ „ํ•˜๋‹ค.

 

function App() {
  const [counter, setCounter] = useState(0)

  function increase() {
    setCounter((prev)=>prev+1);
  }

  function decrease() {
    setCounter((prev)=>prev-1);
  }
  return (
    <>
      <div>counter : {counter}</div>
      <button onClick={increase}>+</button>
      <button onClick={decrease}>-</button>
    </>
  );
}

 

 


 

+ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋กœ ์ƒํƒœ๊ด€๋ฆฌํ•˜๊ธฐ

์š”์ƒˆ๋Š” ๋ณดํ†ต ํ•จ์ˆ˜ํ˜•์„ ์“ฐ๊ณ  ์žˆ๊ธด ํ•˜์ง€๋งŒ ์•Œ์•„๋‘๋Š” ํŽธ์ด ์ข‹๋‹ค

 

class App extends Component {
  state = { counter: 0 };

  render() {
    return (
      <>
        <div>counter {this.state.counter}</div>
        <button
          onClick={() => this.setState({ counter: this.state.counter + 1 })}>
          +
        </button>
        <button
          onClick={() => this.setState({ counter: this.state.counter - 1 })}>
          -
        </button>
      </>
    );
  }
}

 

 

๋˜๋Š” ์•„๊นŒ ํ•จ์ˆ˜์—์„œ prev ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ผ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

class App extends Component {
  // ์ƒํƒœ๋ฅผ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ง์ ‘ ์ •์˜, counter๋Š” ์ƒํƒœ ๋ณ€์ˆ˜
  state = { counter: 0 };
  // this์˜ ๋ฐ”์ธ๋”ฉ ๋ฌธ์ œ๋กœ ์ธํ•ด ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜ ์„ ์–ธ์€ ๋ถˆ๊ฐ€๋Šฅํ•จ -> ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ this๋ฅผ ์ž๋™ ๋ฐ”์ธ๋”ฉ
  // ํŒŒ๋ผ๋ฏธํ„ฐ์ธ prevState๋กœ ์ด์ „ ์ƒํƒœ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ˜์˜
  increase = () => {
    // this.setState()๋กœ ์ƒํƒœ ๋ณ€๊ฒฝ
    this.setState((prevState) => ({
      counter: prevState.counter + 1,
    }));
  };

  decrease = () => {
    this.setState((prevState) => ({
      counter: prevState.counter - 1,
    }));
  };
  render() {
    return (
      <>
        <div>counter {this.state.counter}</div>
        <button onClick={this.increase}>+</button>
        <button onClick={this.decrease}>-</button>
      </>
    );
  }
}

 

 

 

'react' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

React / props, state ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ  (0) 2025.04.06
React / SPA vs MPA  (0) 2025.04.04
React / map, filter๋กœ ๋ฐ˜๋ณต ๋ Œ๋”๋งํ•˜๊ธฐ  (0) 2025.04.03
React / JSX ๋ฌธ๋ฒ•  (0) 2025.04.03
React / ์ปดํฌ๋„ŒํŠธ  (0) 2025.04.03