React

[React] React Hook - useState

myinfo7091 2024. 11. 14. 21:42

 

Hook 호출의 규칙?

반복문, 조건문, 중첩되는 함수 내에서 Hook를 호출할 수 없다. return이 실행되기 전 react 함수의 최상위 레벨에서 Hook를 사용해야 컴포넌트가 렌더링될 때마다 항상 동일한 순서로 Hook이 호출되는 것을 보장한다. 이를 통해 useState, useEffect와 같은 Hook이 여러 번 호출되는 중에도 그 상태를 올바르게 유지할 수 있다.

 

 

// React의 함수 컴포넌트는 어떻게 생겼을까?
// 1)
const App = (props) => {
// 여기에 react hook를 사용하면 된다. 아래도 마찬가지
  return <div />;
};

// 2) 
function App(props) { 
  return <div />; 
}

 

응 단축키 딸깍 할거야 rafce rfce Hook는 react state를 함수 안에서 사용할 수 있게 하는데, 클래스 안에서는 동작하지 않지만 굳이 클래스를 작성하지 않고도 쓸 수 있다. 아래의 코드를 보자.

 

import React, { useState } from "react";

function ExampleA() {
  // state 변수 선언
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked the button {count} times!</p>
      <button onClick={() => setCount(count + 1)}>Click</button>
    </div>
  );
}

export default ExampleA;
// class 문법으로 같은 코드 작성
class ExampleB extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0,
    };
  }

  render() {
    return (
      <div>
        <p>You clicked the button {this.state.count} times!</p>
        <button onClick={() => this.setState({ count: this.state.count + 1 })}>
          Click
        </button>
      </div>
    );
  }
}

// state는 { count : 0 } 이고, this.setState()를 호출하는 버튼을 클릭하면 state.count를 1씩 증가시킨다.

 


 

// useState는 state를 함수 컴포넌트 안에서 사용할 수 있게 한다.
import React, { useState } from 'react'

function App() {

    const [count, setCount] = useState(0);
  return (
    <div>App</div>
  )
}

export default App

 

 

useState의 인자로 무엇을 넘겨주는가?
useState() Hook의 인자로 넘겨주는 값은 곧 state의 초기값이 된다. state는 클래스 문법에서처럼 객체여야 할 필요는 없다. 문자 타입, 숫자 타입도 될 수 있고, 위의 코드에서는 0을 초기값으로 선언했다. 만약 서로 다른 2개의 변수를 저장하고 싶다면 useState()도 두 번 호출해야 한다.

 

 

useState는 무엇을 반환하는가?
state 변수와 이를 변경(갱신)할 수 있는 함수를 반환한다. const [state, setState] = useState()라고 쓰는 것도 그런 까닭이다. 배열의 구조분해를 떠올리면 더 이해하기 쉽다. const [fruit, setFruit] = useState('banana');에서 useState를 사용하면 fruit, setFruit을 반환한다.