이 오류는 React가 다음을 포함하는 구성 요소의 상태를 업데이트하려고 할 때 발생합니다. 이미 DOM에서 마운트 해제되었습니다. React는 각 구성요소에 대해 현재 마운트되었는지 여부를 나타내는 내부 플래그를 유지합니다. 구성 요소가 마운트 해제된 후 업데이트가 트리거되면 React는 잠재적인 메모리 누수 및 기타 예측할 수 없는 동작을 방지하기 위해 이 오류를 발생시킵니다.
오류 메시지에는 문제가 있는 구성 요소와 이벤트 핸들러 또는 상태 업데이트를 담당하는 수명 주기 후크를 식별하는 데 도움이 될 수 있는 정보가 포함되어 있습니다. 구성 요소 이름이 포함되어 있으므로 스택 추적에서 "구성 요소" 값을 찾으세요. 또한 업데이트를 트리거한 특정 이벤트 핸들러 또는 수명 주기 후크는 함수 이름이나 코드의 주변 컨텍스트에서 추론할 수 있는 경우가 많습니다.
문제를 해결하려면 구성요소가 마운트된 동안에만 상태 업데이트가 수행되도록 해야 합니다. 이에 접근하는 방법은 다음과 같습니다.
isMounted 플래그 확인: 클래스 기반 구성 요소에서는 componentWillUnmount에서 false로 설정된 부울 isMounted 플래그를 생성할 수 있습니다. 상태 업데이트를 수행하기 전에 isMounted가 true인지 확인하여 구성 요소가 계속 렌더링되는지 확인하세요.
class Component extends React.Component { componentWillUnmount() { this.isMounted = false; } someMethod() { if (this.isMounted) { this.setState({ ... }); } } }
조건부 렌더링 사용: 기능 구성 요소에서 다음을 수행할 수 있습니다. 마운트 해제된 구성 요소의 렌더링을 방지하려면 조건부 렌더링을 사용하세요. isMounted 플래그가 포함된 종속성 배열을 사용하여 useEffect 후크에 상태 업데이트를 래핑합니다.
const Component = props => { const [isMounted, setIsMounted] = React.useState(true); useEffect(() => { return () => setIsMounted(false); }, []); if (!isMounted) return null; // State updates here... };
비동기 함수 취소: 상태 업데이트가 다음에 의해 트리거되는 경우 setTimeout 또는 fetch와 같은 비동기 작업의 경우, componentWillUnmount 수명 주기 후크 또는 정리 함수에서 작업을 취소해야 합니다. 효과 후크를 사용하세요. 이렇게 하면 구성 요소가 마운트 해제된 후 상태 업데이트가 발생하지 않습니다.
class Component extends React.Component { componentWillUnmount() { clearTimeout(this.timeoutId); } componentDidMount() { this.timeoutId = setTimeout(() => { this.setState({ ... }); }, 1000); } }
위 내용은 '마운트 해제된 구성 요소에 대해 React 상태 업데이트를 수행할 수 없습니다.' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!