- 클래스 컴포넌트에서만 적용되며 함수 컴포넌트에서는 훅(Hook)을 사용하여 상태와 라이프 사이클을 관리
- 함수형 컴포넌트 사용 지향 하지만
- 클래스형 컴포넌트 이해가 되면 더욱 함수형 컴포넌트 훅을 이해하는데에 도움

→ 헷갈리면
로 크게 구분하여 이해
constructor : 컴포넌트가 만들어지면 가장 먼저 실행되는 메서드
getDerivedStateFromProps : props로 받아온 것을 state에 넣을 때 사용하는 메서드이며, 컴포넌트가 처음 렌더링 되기 전에 호출되며 리렌더링 전에도 항상 실행
static getDerivedStateFromProps(props, state)
render : 컴포넌트를 렌더링 하는 메서드
componentDidMount : 컴포넌트의 첫 렌더링을 마친 후 호출되는 메서드, 이 매소드가 호출되는 시점에서는 이미 컴포넌트가 화면에 출력된 상태. 이 단계에선 axios fetch 등을 사용해 해당 컴포넌트에서 필요하는 데이터를 요청하는 등의 작업을 진행. setTimeout과 같이 화면에 출력된 뒤에도 실행되는 상태
class MountingExample extends Component {
constructor(props) {
super(props);
this.state = {
message: 'Component is mounting...',
};
}
componentDidMount() {
setTimeout(() => {
this.setState({
message: 'Component has mounted!',
});
}, 2000); // 2초 후에 메시지 업데이트
}
render() {
return (
<div>
<p>{this.state.message}</p>
</div>
);
}
}
componentDidMount() 메서드는 클래스형 컴포넌트에서 컴포넌트가 마운트된 후에 실행되는 메서드로 setTimeout은 업데이트 할 때라고 보면 됨import React, { Component } from 'react';
class ScrollDemo extends Component {
constructor(props) {
super(props);
this.listRef = React.createRef();
this.state = {
items: [],
};
}
componentDidUpdate(prevProps, prevState) {
if (prevState.items.length < this.state.items.length) {
const snapshot = this.listRef.current.scrollHeight;
this.listRef.current.scrollTop += this.listRef.current.scrollHeight - snapshot;
}
}
addItem = () => {
this.setState(prevState => ({
items: [...prevState.items, prevState.items.length + 1],
}));
};
render() {
return (
<div>
<button onClick={this.addItem}>Add Item</button>
<ul
ref={this.listRef}
style={{ height: '200px', overflow: 'auto', border: '1px solid black' }}
>
{this.state.items.map(item => (
<li key={item}>{item}</li>
))}
</ul>
</div>
);
}
}
export default ScrollDemo;
import React, { useState, useEffect, useRef } from 'react';
function ScrollDemo() {
const [items, setItems] = useState([]);
const listRef = useRef();
useEffect(() => {
if (listRef.current) {
listRef.current.scrollTop = listRef.current.scrollHeight;
}
}, [items]);
const addItem = () => {
setItems(prevItems => [...prevItems, items.length + 1]);
};
return (
<div>
<button onClick={addItem}>Add Item</button>
<ul ref={listRef} style={{ height: '200px', overflow: 'auto', border: '1px solid black' }}>
{items.map(item => (
<li key={item}>{item}</li>
))}
</ul>
</div>
);
}
export default ScrollDemo;

componentWillUnmount : 컴포넌트가 사라지기 직전에 호출을 하고, 주로 여기서는 DOM에 등록했었던 이벤트들을 제거해주는 용도로 사용
ex) setInterval 헤제 등
함수형 컴포넌트는 React 라이브러리에서 UI를 구축하기 위해 사용되는 컴포넌트 유형 중 하나
클래스형 컴포넌트와 비교하여 상대적으로 간결하고 간단한 구조를 가지며, 최근 React 버전에서는 주로 함수형 컴포넌트와 훅(Hook)을 사용하는 추세
함수형 컴포넌트는 주로 useState, useEffect, useContext 등의 훅을 사용하여 상태와 부작용을 관리
라이프사이클 개념은 주로 클래스형 컴포넌트에서 사용되었지만, 함수형 컴포넌트에서도 비슷한 동작을 할 수 있음
class형 컴포넌트 이해가 되면 더욱 함수형 컴포넌트 훅을 이해하는데에 도움
함수형 컴포넌트의 라이프사이클은 훅을 이용하여 다룰 수 있습니다. 주요 훅을 통해 함수형 컴포넌트의 라이프사이클과 비슷한 동작을 수행할 수 있습니다.
useEffect: useEffect 훅은 함수형 컴포넌트에서 라이프사이클의 일부 역할을 수행. 컴포넌트가 마운트될 때, 업데이트될 때, 언마운트될 때 등의 시점에서 특정 작업을 수행 (거의 모든 지점에서 수행) 클래스형 컴포넌트의 componentDidMount, componentDidUpdate, componentWillUnmount와 유사한 역할
useState: useState 훅은 컴포넌트의 상태를 관리하는 역할. 상태 값이 변경될 때마다 컴포넌트는 리렌더링되어 새로운 상태를 반영
useMemo, useCallback: 이 두 훅은 성능 최적화를 위해 사용. useMemo는 계산 비용이 높은 연산의 결과를 캐싱하여 불필요한 재계산을 방지. useCallback은 콜백 함수를 메모이제이션하여 매번 새로운 함수가 생성되는 것을 방지하여 자식 컴포넌트의 불필요한 리렌더링을 막음.
useContext: useContext 훅은 컴포넌트 트리 전체에서 전역적으로 상태나 함수를 사용할 수 있게 해줌. 클래스형 컴포넌트의 Context API와 유사한 역할.
리액트의 라이프사이클(Life Cycle)에 대해 알아보자 — 로그 남기기 (tistory.com)