정의
함수형 컴포넌트에서도 life cycle, state 관리를 할 수 있게 해주는 함수
이전의 React는 class형 컴포넌트로 life cycle, state 관리를 해왔다.
Hook이 도입되며 함수형 컴포넌트에서도 state, life cycle 관리를 할 수 있게 되었으며 React는 개념적으로 함수에 더 가깝기 때문에, class 대신 함수형 + hook을 권장하고 있다(공식문서)
동기 (기존의 문제점)
1. 컴포넌트들 사이에서 상태로직 재사용하기
이전에 class형 컴포넌트에 상태 로직이 종속적이었기 때문에 (constructor, componentDidMount 등) 컴포넌트의 계층이 깊어질수록 코드가 복잡해졌음.
=> useState 같은 React Hook은 계층의 변화 없이 상태 관련 로직을 재사용할 수 있도록 함
2. 각 생명주기 메서드에 관련 없는 로직이 자주 섞임
이전 class형 컴포넌트에서는 생명주기에 관련한 로직을 짤 때 componentDidMount, componentDidUpdate, componentDidUnMount 란 함수를 썼음
쓸 수 있는 함수가 정해져있다보니 componentDidMount에 여러 로직이 섞이는 경우가 잦았음
=> React Hook은 여러 개의 useEffect를 쓸 수 있어 관련 있는 로직들끼리 하나의 작은 함수로 모을 수 있음
3. 개념적으로 더 가까운 Hook 권장
React 는 개념적으로 함수에 더 가깝기 때문에 class 없이 React를 사용할 수 있게 해주는 hook을 권장
State Hook
useState()로 state를 관리할 수 있음
기존에는 constructor안에 있는 this.state로 상태들을 관리했다. 그러나 React Hook의 useState를 쓰면 constructor에 구애받지 않고 함수형 컴포넌트 안에 상태들을 선언할 수 있다.
// class 형
this.state = {
count: 0
};
// 함수형 useState
const [count, setCount] = useState(0);
state값을 업데이트할 때도 클래스형은 this.setState란 함수를 사용해서 this.state.count값을 업데이트해주어야하지만,
useState는 선언할 때 만든 setCount(count)함수로 업데이트 해주면 된다.
// 클래스형
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
// 함수형
<button onClick={() => setCount(count + 1)}>
예제
class Example extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
render() {
return (
<div>
<p>You clicked {this.state.count} times</p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
Click me
</button>
</div>
);
}
}
import React, { useState } from 'react';
function Example() {
// "count"라는 새 상태 변수를 선언합니다
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
Effect Hook
side effects를 수행하는 함수
- 여기서 side effects란 다른 컴포넌트에 영향을 줄 수도 있고, 렌더링 과정에선 구현할 수 없는 작업을 뜻한다.
ex. 컴포넌트 안에서 데이터를 가져오거나 구독하거나 DOM을 직접 조작하거나
기존의 클래스형 컴포넌트에는 주로 componentDidMount, componentDidUpdate, componentWillUnmount 함수를 썼다.
각 함수가 실행되는 시기는 밑 그림 참조
* React의 생명주기: 생성(mounting) -> 업데이트(updating) -> 제거 (unmounting)
React Hook의 useEffect는 위 세 함수를 합쳐놓은 함수이다.
대신 이전에는 3개의 함수에 필요한 로직들을 여러 개 구겨 넣었다면, 이젠 여러 개의 useEffect로 관련 있는 로직들만 모아서 하나의 함수로 구성할 수 있다.!
참조
'CS > web' 카테고리의 다른 글
[html] 공백과 의 차이 (0) | 2024.04.29 |
---|---|
4/16 HTML/CSS (0) | 2024.04.18 |
CSRF, XSS, CORS (0) | 2024.03.12 |
CSR (Client Side Rendering) & SSR (Server Side Rendering) (0) | 2024.03.08 |
JWT(Json Web Token) (0) | 2024.03.08 |