
Title: React 컴포넌트 두 번 렌더링되는 문제 해결하기
React 컴포넌트가 두 번 렌더링되는 문제가 발생하는 경우가 있나요? 올바른 자리에 오셨습니다. 이 블로그 게시물에서는 React 컴포넌트가 두 번 렌더링되는 원인과 이 문제를 해결하기 위한 해결책에 대해 알아보겠습니다.
React Strict Mode
컴포넌트가 두 번 렌더링되는 가능한 하나의 이유는 React Strict Mode의 사용입니다. React Strict Mode는 개발 모드로서 코드에서 문제가 나타나기 전에 잠재적인 문제를 식별하고 강조하는 데 도움을 줍니다. 무작위적인 부작용을 포착하기 위해 렌더 함수와 같은 특정 함수를 의도적으로 두 번 트리거합니다.
React Strict Mode가 애플리케이션에서 두 번 렌더링을 유발하는지 확인하려면 index.js 파일로 이동하고 ReactDOM.render() 메소드를 찾아보세요. 렌더 메소드의 주변 태그에서 React.StrictMode 컴포넌트를 제거하세요.
ReactDOM.render(
<App />,
document.getElementById('root')
);
React.StrictMode를 제거함으로써 컴포넌트가 이제 한 번만 렌더링되는 것을 확인할 수 있습니다.
비동기 작업과 렌더 타이밍
두 번 렌더링되는 다른 가능한 원인은 컴포넌트의 라이프사이클 메소드에 있는 비동기 작업입니다. 코드에서 componentDidMount() 메소드가 Firestore에서 데이터를 가져오기 위해 비동기 작업(getPoints)을 트리거하는 것으로 보입니다.
비동기 작업이 완료되기까지 시간이 걸린다면, 초기 렌더링이 발생하기 전에 완료되지 않아 처음 렌더링은 초기 상태(0 포인트)를 표시하고 비동기 작업이 완료되면 상태가 업데이트되어 올바른 데이터로 두 번째 렌더링을 유발합니다.
이 문제를 해결하기 위해 데이터를 가져오고 있는지에 대한 정보를 제공하기 위해 조건부 렌더링을 추가할 수 있습니다. isFetching과 같은 부울 플래그를 도입하여 데이터가 여전히 검색 중인지 추적할 수 있습니다. 가져오기 작업이 진행 중인 동안 로딩 메시지나 스피너를 표시하고 데이터를 사용할 수 있게 되면 컴포넌트를 렌더링하세요.
render() {
const { isFetching } = this.state;
return (
<div>
{isFetching ? (
<div>로딩 중...</div>
) : (
// 데이터와 함께 컴포넌트 렌더링
<div>
<p>{this.state.phoneNumber}는 {this.state.points} 포인트를 가지고 있습니다...</p>
<p>포인트를 사용하거나 추가하시겠습니까?</p>
<div>
<button>포인트 사용</button>
<button>포인트 추가</button>
</div>
</div>
)}
</div>
);
}
다른 가능한 해결책
위의 해결책으로 문제를 해결할 수 없는 경우, 몇 가지 추가적으로 시도해볼 수 있는 방법이 있습니다:
1. 우연한 재렌더링 확인:
컴포넌트에서 우연한 재렌더링이 있는지 확인하세요. 렌더 함수 내에서 상태 변경 메소드를 호출하거나 재렌더링을 유발할 수 있는 라이프사이클 메소드 내에서 호출하지 않도록 확인하세요.
2. 코드 최적화 및 상태 업데이트:
코드를 검토하여 불필요한 상태 업데이트나 비효율적인 렌더링 패턴이 있는지 확인하세요. React의 React.memo()와 같은 메모이제이션 기법 또는 적절한 경우 데이터 캐싱을 사용하여 불필요한 재렌더링을 피할 수 있습니다.
3. 외부 라이브러리 및 종속성 검토:
컴포넌트에서 사용하는 외부 라이브러리나 종속성을 조사하세요. 일부 라이브러리나 사용자 정의 코드는 추가적인 렌더링을 유발할 수 있습니다. 문제를 해결하는 데 도움을 줄 수 있는 업데이트나 알려진 문제가 있는지 문서를 검토하세요.
결론
React 컴포넌트의 두 번 렌더링은 해결하기 어려운 문제가 될 수 있지만, 올바른 접근 방식으로 이 문제를 제거할 수 있습니다. 이 블로그 게시물에서는 두 번 렌더링 문제의 가능한 원인을 다루고, React Strict Mode를 제거하고, 비동기 작업과 렌더 타이밍을 처리하고, 우연한 재렌더링을 확인하고, 코드 최적화와 상태 업데이트를 검토하며, 외부 라이브러리와 종속성을 검토하는 등 여러 해결책을 제공했습니다.
이러한 해결책을 구현함으로써 React 컴포넌트가 한 번만 렌더링되도록 하여 성능을 최적화하고 더 부드러운 사용자 경험을 제공할 수 있습니다.