728x90
반응형
React로 개발하다 보면 "생명주기 메서드"라는 단어를 자주 접하게 될 거예요. 컴포넌트의 생명주기는 React가 컴포넌트를 생성하고 업데이트하고 제거하는 과정을 말하는데요, 이를 통해 컴포넌트의 특정 시점에서 로직을 실행할 수 있어요.
이번 포스팅에서는 클래스형 컴포넌트를 기준으로 생명주기 메서드의 기본 개념부터 실전 예제까지 다뤄볼게요! 함께 알아볼까요? 🧑💻
반응형
1. 컴포넌트 생명주기란? ⏳
React 컴포넌트는 크게 세 가지 단계로 구분되는 생명주기를 가집니다:
- 마운트(Mount): 컴포넌트가 처음 화면에 나타나는 단계. 이 단계에서는 초기화 작업이 주로 이루어져요.
- 업데이트(Update): 컴포넌트가 리렌더링되는 단계. props나 state가 변경되면 UI가 다시 그려집니다.
- 언마운트(Unmount): 컴포넌트가 화면에서 제거되는 단계. 리소스를 정리하거나 구독을 해제할 때 활용돼요.
각 단계에서 특정 메서드를 사용할 수 있어요. 이 메서드들을 활용하면 컴포넌트의 상태에 따라 필요한 작업을 실행할 수 있답니다! 🧠
2. 주요 생명주기 메서드 🌱
1) 마운트 단계
- constructor(): 컴포넌트가 생성될 때 호출됩니다. 초기 state를 설정하거나 메서드를 바인딩하는 데 사용돼요. 하지만 최신 React에서는 초기 state 설정만 필요하다면 constructor를 생략하고 클래스 속성으로 state를 정의하는 방식을 권장합니다.
- componentDidMount(): 컴포넌트가 화면에 렌더링된 직후 호출돼요. API 호출, DOM 조작, 또는 타이머 시작 같은 작업을 수행하기에 최적의 위치입니다.
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = { data: null };
}
componentDidMount() {
fetch('https://api.example.com/data')
.then((response) => response.json())
.then((data) => this.setState({ data }));
}
render() {
return <div>{this.state.data ? this.state.data : 'Loading...'}</div>;
}
}
2) 업데이트 단계
- componentDidUpdate(prevProps, prevState): 컴포넌트가 업데이트된 후 호출됩니다. props나 state의 변경을 감지하고, 변경된 데이터에 따라 추가 작업을 실행할 수 있어요.
componentDidUpdate(prevProps, prevState) {
if (this.state.value !== prevState.value) {
console.log('State value updated:', this.state.value);
}
}
- 업데이트 단계에서는 불필요한 리렌더링을 방지하기 위해 shouldComponentUpdate 메서드를 사용할 수도 있습니다. 하지만 이는 성능 최적화가 필요한 경우에만 사용하는 것이 좋아요.
3) 언마운트 단계
- componentWillUnmount(): 컴포넌트가 제거되기 직전에 호출돼요. 타이머 정리, 구독 해제, 또는 기타 리소스 정리가 필요한 경우에 유용합니다.
componentWillUnmount() {
clearInterval(this.timer);
}
3. 실전 예제 – API 호출과 타이머 앱 만들기 🕰
이제 위의 생명주기 메서드를 활용한 예제를 만들어볼까요? 🎉
API 데이터를 불러오는 예제
간단한 사용자 목록을 표시하는 컴포넌트를 만들어봅시다.
import React from 'react';
class UserList extends React.Component {
constructor(props) {
super(props);
this.state = { users: [], isLoading: true };
}
componentDidMount() {
fetch('https://jsonplaceholder.typicode.com/users')
.then((response) => response.json())
.then((data) => this.setState({ users: data, isLoading: false }));
}
render() {
const { users, isLoading } = this.state;
return (
<div>
<h1>User List</h1>
{isLoading ? (
<p>Loading...</p>
) : (
<ul>
{users.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
)}
</div>
);
}
}
export default UserList;
타이머 앱 만들기
이번엔 타이머를 관리하는 컴포넌트를 만들어볼게요.
import React from 'react';
class Timer extends React.Component {
constructor(props) {
super(props);
this.state = { seconds: 0 };
}
componentDidMount() {
this.timer = setInterval(() => {
this.setState((prevState) => ({ seconds: prevState.seconds + 1 }));
}, 1000);
}
componentWillUnmount() {
clearInterval(this.timer);
}
render() {
return (
<div>
<h1>Timer</h1>
<p>Elapsed time: {this.state.seconds} seconds</p>
</div>
);
}
}
export default Timer;
4. 동작 설명 🎯
API 예제의 흐름
- 컴포넌트가 화면에 렌더링되면 componentDidMount()에서 API를 호출합니다.
- 데이터를 성공적으로 받아오면 state를 업데이트하고, UI가 리렌더링됩니다.
- 데이터가 로드되기 전에는 Loading... 메시지가 표시되고, 로드 완료 후 사용자 목록이 나타납니다.
타이머 앱의 흐름
- 컴포넌트가 마운트되면 setInterval()로 1초마다 state를 업데이트합니다.
- 컴포넌트가 언마운트되면 componentWillUnmount()에서 타이머를 정리합니다.
- 초 단위로 증가하는 타이머가 화면에 표시됩니다.
5. 마무리 🎯
생명주기 메서드는 React에서 컴포넌트의 상태와 로직을 효율적으로 관리하기 위한 강력한 도구예요.
이번 포스팅에서는 주로 클래스형 컴포넌트를 다뤘지만, 함수형 컴포넌트에서는 useEffect() 훅을 사용해 비슷한 작업을 수행할 수 있답니다. 이를 통해 클래스형과 함수형 컴포넌트의 차이를 이해할 수도 있어요!
생명주기의 개념과 활용법을 잘 익히면 더 복잡한 앱도 자신 있게 만들어볼 수 있을 거예요! 💪
React 개발의 첫걸음, 생명주기 완벽 정복! 이제 여러분도 전문가처럼 React를 다룰 준비가 되셨나요? 😄
728x90
반응형
'프로그래밍 > React' 카테고리의 다른 글
[React] Context API로 글로벌 상태 관리 마스터하기! 🌍 (0) | 2024.12.28 |
---|---|
[React] 나만의 Custom Hook 만들기 – 재사용 가능한 로직 분리하기 🛠️ (0) | 2024.12.27 |
[React] Hooks 기초부터 마스터! useState, useEffect 완벽 활용법🧵 (0) | 2024.12.27 |
[React] 컴포넌트와 Props, State 완전 마스터하기! 🚀 (1) | 2024.12.26 |
[React] React란? 기본 개념부터 핵심 원리까지 완벽 정리!😎 (1) | 2024.12.26 |