useState는 React 라이브러리에서 제공하는
훅(Hook)
중 하나로, 함수 컴포넌트에서 상태(state)를 사용할 수 있게 해주는 메서드 인데요.여기서
Hook
이란 리액트 16.8v 부터 등장한 기능으로서, 리액트 라이브러리에서 제공하는 특별한 함수이며, 이 함수들을 사용하여 함수 컴포넌트에서 상태(state) 및 생명주기(lifecycle)와 관련된 기능을 사용할 수 있게 해주는데이 말인 즉 리액트에서의 상태 및 생명주기 관리는 16.8v에서 등장한 Hook 이전과 이후로 나뉠 수 있다는 뜻인거죠.
앞서 말씀 드렸다싶이,
Hook
의 등장 이전까지는 주로 클래스 컴포넌트에서 상태를 관리했는데요. 상태 로직이나 메서드 등이 한 곳에 작성됨으로, 또 반복적인 코드가 증가되다보니 코드의 관리에 있어서 한계를 가질 수 밖에 없었습니다.import React, { Component } from 'react'; class Example extends Component { // 컴포넌트를 상속 받아 this에 바인딩 constructor(props) { super(props); this.state = { count: 0, }; } handleIncrement = () => { // Component의 this(count를 담고 있는 state)를 1 증가 this.setState({ count: this.state.count + 1 }); }; render() { return ( <div> <p>You clicked {this.state.count} times</p> <button onClick={this.handleIncrement}> Click me </button> </div> ); } } > export default Example;
앞서 말씀 드린대로 이전에 사용했던 클래스형 컴포넌트의 여러 문제점들을 개선하기 위해 등장한
Hook
덕분에 번거롭게 this를 바인딩 할 필요가 없어졌고, 코드의 양 또한 줄일 수 있었습니다.import React, { useState, useEffect } from 'react'; function Example() { const [count, setCount] = useState(0); function handleIncrement(){ setCount(count + 1); } function handleDecrement(){ setCount((count) => count - 1); } function resetStates(){ setCount(0) } return ( <div> <p>You clicked {count} times</p> <button onClick={handleIncrement}> + </button> <button onClick={handleDecrement}> + </button> <button onClick={resetStates}> reset </button> </div> ); } export default Example;