React(3) 〓 useState

Acrylic·2024년 3월 13일

useState

useState는 기존에 화면을 보여 줄 때 텍스트 따위가 즉각적으로 변하지 않는 문제가 있어 그걸 보완하고자 해서 사용하는 함수입니다.

import "./styles.css";
import React from "react";

export default function App() {
  let a = 0;

  function plus() {
    a++;
    console.log(a);
  }

  return (
    <div className="App">
      <button onClick={plus}>plus</button>
      {a}
    </div>
  );
}

예를 코드로 들자면 이렇습니다.
화면에서 버튼을 누르면 즉각 1씩 증가하는 모습을 보여 주어야 하는데, 그렇지 않습니다.
console에는 값이 분명히 변하고 있는데, 화면에는 출력된 0이 그대로 유지되는 것을 볼 수 있습니다.

이걸 해결하고자 쓰는 게 useState인 거죠.

import "./styles.css";
import React from "react";

export default function App() {
  let [result, func] = React.useState(0);

  function Plus() {
    let a = 0;
    if (a == 0) a = 1;
    func((result) => result + a);
  }

  return (
    <div className="App">
      {result}
      <button onClick={Plus}>Click</button>
    </div>
  );
}

useStateReact를 불러와서 써야 합니다.
이렇게 let [(a), (b)] = React.useState([자기가 쓰려고 하는 a 형식에 맞는 값]);으로 선언하는데,
값을 변화시키려면 func(b)를 쓰셔야 합니다. 위의 경우 Arrow Function으로 1씩 result의 값을 증가시키겠죠.

onClick으로 함수를 부르실 때에는 중괄호로 묶고 함수 이름을 작성하시면 잘 작동합니다.

import "./styles.css";
import React from "react";

export default function App() {
  const [something, setThings] = React.useState(["Thing 1"]);
  // destructuring
  // setter function
  console.log(something);

  const func = something.map((element) => {
    return <p key={element}>{element}</p>;
  });

  function addItem() {
    const newThingText = `Thing ${something.length + 1}`;
    setThings((prev) => [...prev, newThingText]);
    console.log(something);
  }

  return (
    <div className="App">
      <button onClick={addItem}>Add Item</button>
      {func}
    </div>
  );
}

배열이면 배열 형식으로 쓰시면 되고요, 배열 안에 추가하실 때는 [...prev(= 전에 있던 거), (지금 넣을 거)] 이렇게 쓰시면 됩니다.

profile
프런트엔드 개발자 지망생

0개의 댓글