트리거: 렌더링 요청
렌더링은 두 가지 경우에 발생합니다.
- 초기 렌더링: 애플리케이션이 처음 실행될 때, 루트 컴포넌트를 DOM에 마운트하기 위해 렌더링이 트리거됩니다.
- 상태/Props 변경: useState나 useReducer를 통해 상태가 업데이트되거나, 부모로부터 새로운 props가 전달되면 재렌더링이 발생합니다.
렌더: 컴포넌트 호출과 JSX 계산
렌더 단계에서 React는 컴포넌트를 호출해 현재 상태와 props를 기반으로 JSX 트리를 생성합니다. 이 과정은 순수 함수처럼 동작하여, 동일한 입력에 대해 항상 동일한 출력을 반환합니다. 렌더링은 실제 DOM에 반영되기 전, 메모리 내에서 계산되는 단계로 볼 수 있습니다.
import { useState, useEffect } from 'react';
export default function ProgressTracker() {
const [progress, setProgress] = useState(0);
// 2초마다 진행률을 10%씩 증가
useEffect(() => {
const interval = setInterval(() => {
setProgress((prev) => (prev < 100 ? prev + 10 : 100));
}, 2000);
return () => clearInterval(interval);
}, []);
return (
<div style={{ padding: '20px', border: '1px solid #ccc', maxWidth: '400px' }}>
<h2>진행률: {progress}%</h2>
<div
style={{
width: `${progress}%`,
height: '20px',
backgroundColor: '#4caf50',
transition: 'width 0.3s ease'
}}
/>
<p>작업이 진행 중입니다...</p>
</div>
);
}
커밋: DOM에 반영
렌더 단계에서 계산된 JSX 트리가 준비되면, React는 이를 실제 DOM에 반영합니다. 이 과정에서 React는 이전 렌더링 결과와 비교해 변경된 부분만 업데이트합니다.
- 초기 렌더링: DOM 노드를 새로 생성해 화면에 붙임.
- 재렌더링: 이전 렌더링 결과와 비교하여 변경된 부분만 최소한의 작업으로 업데이트합니다. 위 예제에서 <p>는 변경되지 않으므로 DOM에서 수정되지 않습니다.
'REACT > 리액트 학습하기' 카테고리의 다른 글
[REACT] state의 스냅샷 이해하기 (0) | 2025.03.14 |
---|---|
[REACT] 상태 관리: useState로 컴포넌트의 동적 메모리 활용하기 (0) | 2025.03.14 |
[REACT] 이벤트 핸들링 기법 (0) | 2025.03.14 |
[REACT] UI 트리 이해하기 (0) | 2025.03.13 |
[REACT] 컴포넌트의 최적화와 확장 (0) | 2025.03.13 |