06. Component State Handle

함수형 컴포넌트에서는 컴포넌트 내부의 데이터를 사용하고, handle하기 위해서 useState라는 Hook을 사용한다.

  • useState를 사용하면, 현재의 원소상태와, 이 원소를 수정할 수 있는 setter가 주어진다.

    const [keyword, setKeyword] = React.useState("");
  • useState 안에 들어가 있는 값은 해당 value의 초기값에 해당된다.

  • 우리가 정한 setter를 통해 value를 수정할 수 있다.

  • setter를 사용하는 방법은 두 종류로, 새로운 value를 그대로 넣어주는 방법과, 함수를 넣어주는 방법이 있다.

  • 자세한 설명은 공식문서인 https://ko.reactjs.org/docs/faq-state.html 여기에 잘 설명되어 있다.

  • 새로운 value를 넣어주는 방식은 setState의 특성상 연속되는 state의 값 변경을 즉각적으로, 사용하지 못한다는 단점이 있다.

  • 왜냐하면 위의 공식설명서에서도 나와있듯이, state의 값은 즉각적으로 변화하는 것이 아니기 때문에, 이전 상태값을 가져오지 못하는 경우가 발생한다.

  • 그렇기 때문에, 과거의 값을 활용하여, 새로운 작업을 할때에는, 새로운 값을 바로 넣어주는 것보다, 함수를 통해 값을 변화시켜주는 것이 더 좋다.

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Static Template</title>
  </head>
  <script src="https://unpkg.com/react@17/umd/react.development.js"></script>
  <script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
  <body>
    <div id="root"></div>
  </body>
  <script type="text/babel">
    const rootElement = document.querySelector("#root");
    const App = () => {
      const [count, setCount] = React.useState(0);
      function handleIncrease() {
        setCount((count) => count + 1);
      }

      function handleDecrease() {
        setCount(count - 1);
      }

      function handleDoubleIncrease() {
        handleIncrease();
        handleIncrease();
      }

      function handleDoubleDecrease() {
        handleDecrease();
        handleDecrease();
      }
      return (
        <div>
          <h1>{count}</h1>
          <button onClick={handleIncrease}>+</button>
          <button onClick={handleDoubleIncrease}>2+</button>
          <button onClick={handleDecrease}>-</button>
          <button onClick={handleDoubleDecrease}>2-</button>
        </div>
      );
    };
    ReactDOM.render(<App />, rootElement);
  </script>
</html> 
  • 위 코드를 실행해보면 알지만, 2번 연속으로 더해주는 것은 정상작동하는 것에 반해, 2번연속 값을 내리는 것은 작동안하는 것을 알 수 있다.

'기술공부 > React' 카테고리의 다른 글

[React] 08. Custom Hook  (0) 2021.12.23
[React] 07. Component Side Effect  (0) 2021.12.22
[React] 05. event handler  (0) 2021.12.15
[React] 04. rerendring  (0) 2021.12.14
[React] 03.JSX  (0) 2021.12.10

+ Recent posts