프론트엔드/React

[React] useState()

진기명기 2023. 4. 7. 23:06
💡 React에 가장 기본이 되는 Hook을 뽑자면 useState()가 아닐까.. 할 정도로 정말 많이 사용하게 되었다. 
상태값을 직접 조작해서 변경하지 않아도 되는 편리함을 가지고 있으니!!
useState()를 아래와 같이 정리해보고자 한다. 

 

 

🫠 useState()란?

> state 값이 변경되면 re-rendering 

💡 const [state, setState] = useState('기본값');

* state : 변경하고자 하는 값 
* setState : state를 변경
* 기본값 : state의 기본값 

 

❗️ useState() 사용 주의점 

* 하나의 컴포넌트 안에서만 사용할 수 있다.
* state의 값을 직접 수정하지 않는다. 

 

 

 

 


🤜🏻 useState()를 사용해야 하는 이유?

> 버튼을 누르면 count가 +1 되는 간단한 코드를 리액트로 작성해 보자

// App.js 

import CounterTest from './components/CounterTest';

function App() {
  return (
    <CounterTest />
  )
// CounterTest.js

const CounterTest = () => {
  let count = 0;

  return (
    <div>
      <button onClick={() => (count += 1)}> +1 </button>
      <br />
      Counter: {count}
    </div>
  )
}

export default CounterTest
✅ button을 구현하는 CounterTest 컴포넌트를 하나 생성하고, 이를 App.js에 추가해 주었다.

 

 

 

👉🏻 화면 결과물

 

✅ '+1' button을 누르면 Counter : {count} 즉, count 값이 +1씩 되기를 원한다.

 

 

👎🏻 but 버튼을 클릭했을 때, 생기는 변화는?

아무.. 반응도 없다.. 이게 무슨 일..

 

 

❗️ 이유는? 함수 컴포넌트는 그냥 함수이기 때문이다. 

현재 함수 컴포넌트를 rendering 하는 것은 App.js 😂
따라서 CounterTest 컴포넌트에서 값이 변경된다고 하여 App.js에서 return 호출되는 것은 아니기 때문에 값이 변경되지 않는 것이다. 
따라서 CounterTest 컴포넌트 자체 내에서 상태값을 관리해야 한다!

 

 

 


💛 useState()를 사용해 count를 관리해 보자!

// ConterTest.js

import { useState } from "react"

const CounterTest = () => {
  const [count, setCount] = useState(0)

  return (
    <div>
      <button onClick={() => setCount(count + 1)}> +1 </button>
      <br />
      Counter: {count}
    </div>
  )
}

export default CounterTest
✅ useState를 사용하기 위해 import 하였다.
✅ 변경하고자 하는 값 count와 count의 값을 변경하는 setCount를 useState를 통해 선언하였다. 
✅ useState(0)으로 값을 주어 count의 기본값으로 0을 주었다.
✅ button onClick 이벤트에서 setCount()를 통해 count의 값이 +1 만큼 변경되도록 작성하였다.

 

 

👍🏻 실행 결과를 확인해 보자!

💡 화면처럼 CounterTest 컴포넌트에서 상태값을 useState()로 직접 관리하기 때문에 값이 변경될 때마다 rendering 되는 것을 확인할 수 있다.
(물론 부모 컴포넌트에서 상태값을 관리하는 것이 더 좋지만, useState()를 사용하는 이유를 설명하기 위한 예시였기에 이 정도로만!)