나는 내 반응 구성 요소를 마운트 해제해야하는 유스 케이스가 있습니다. 그러나 경우에 따라 특정 반응 구성 요소가 다른 기능에 의해 마운트 해제됩니다. 따라서 컴포넌트를 마운트 해제하기 전에 컴포넌트가 마운트되었는지 확인해야합니다. isMounted()
공식적으로 사용되지 않기 때문에반응 구성 요소가 마운트 해제되었는지 확인하는 방법이 있습니까?
답변
, 당신은 당신의 요소에서이 작업을 수행 할 수 있습니다
componentDidMount() {
this._ismounted = true;
}
componentWillUnmount() {
this._ismounted = false;
}
자신의 state
변수를 유지하는이 패턴은 ReactJS 문서에 자세히 설명되어 있습니다 : 내가 발견 https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html
구성 요소가 마운트 해제되고, 생성하십시오.이 변수를 채우십시오.
if(!this._calledComponentWillUnmount)this.setState({vars});
내가 막을 길을 찾고 있었기 때문에 여기에 올랐다. polling
API를 중지했다.
react docs은 websocket
케이스를 담당하지만 폴링 이벤트는 커버하지 않습니다.
나는 그것이 작동
// React component
let allowPolling = true
React.createClass({
poll() {
if (!allowPolling) {
return
}
// otherwise, call the api
}
componentWillMount() {
allowPolling = true
}
componentWillUnmount() {
allowPolling = false
}
})
해결할 방법. 희망은 도움이
,
내가하기 Shubham의 대답은 사용을 중지 자신의 코드를 전환해야하는 사람들을위한 반응에 의해 제안 해결 방법이라고 생각] = 너희들이에 대한 모든 실패한 테스트 케이스를 알고 있다면 알려 주시기 바랍니다 isMounted
안티 패턴.
이것은 반드시 나쁜 것은 아니지만이 문제에 대한 실제 해결책을 나열 해 두는 것이 좋습니다.
The article linked by Shubham은이 안티 패턴을 피하기위한 2 가지 제안을 제공합니다. 필요한 것은 구성 요소가 마운트 해제 될 때 setState를 호출하는 이유에 따라 다릅니다. 당신이 당신의 구성 요소의 플럭스 저장소를 사용하는 경우
, 당신은
class MyComponent extends React.Component {
componentDidMount() {
mydatastore.subscribe(this);
}
render() {
...
}
componentWillUnmount() {
mydatastore.unsubscribe(this);
}
}
당신이 ES6, 당신은 만들기 위하여 당신의 약속을 포장해야 할 수 있습니다 약속 사용하는 경우 componentWillUnmount에서 탈퇴해야한다 취소 할 수 있습니다.
const cancelablePromise = makeCancelable(
new Promise(r => component.setState({...}}))
);
cancelablePromise
.promise
.then(() => console.log('resolved'))
.catch((reason) => console.log('isCanceled', reason.isCanceled));
cancelablePromise.cancel(); // Cancel the promise
링크 된 문서에서 자세한에 대한
makeCancelable
을 읽어보십시오.
결론적으로 변수를 설정하고 구성 요소가 탑재되었는지 확인하여이 문제를 해결하지 마십시오. 문제의 근원으로 이동하십시오. 다른 일반적인 경우를 생각해 볼 수 있으면 의견을 말하십시오.
- 1. 마운트 지점의 유형을 확인하는 방법이 있습니까?
- 2. UIViewController가 모달로 표시되고 해제되었는지 여부를 확인하는 방법이 있습니까?
- 3. 토스트가 해제되었는지 확인하는 방법
- 4. 반응에서 구성 요소가 마운트 해제되지 않도록하려면 어떻게해야합니까?
- 5. 부팅시 업데이트가 해제되었는지 확인하는 경우
- 6. /COMPONENTSONLYONCUSTOM을 사용할 때 모든 구성 요소가 선택 해제되었는지 확인하는 방법은 무엇입니까?
- 7. 키가 tkinter에서 해제되었는지 확인하는 방법
- 8. 반응 구성 요소가 상태 변경시 렌더링되지 않음
- 9. 하위 반응 구성 요소가 다시 렌더링되지 않습니다
- 10. 단순 반응 구성 요소가 렌더링되지 않습니다.
- 11. 비 반응 애플리케이션에서 React 구성 요소를 마운트/마운트 해제 할 때 DOM 노드 참조 유지
- 12. 이전 구성 요소가 마운트 해제되기 전의 구성 요소 마운트 (가입 유지)
- 13. 반응 구성 요소가 자체 소품을 편집하도록하는 반 패턴은 왜 있습니까?
- 14. 반응 구성 요소가 상위 구성 요소의 상태를 알고 있어야합니까?
- 15. uialertview가 해제되었는지 확인하는 방법은 무엇입니까? 내 프로그램에서
- 16. dtach - 연결되었는지 또는 연결 해제되었는지 확인하는 방법
- 17. 하위 구성 요소를 클릭하면 부모 반응 구성 요소가 숨겨집니다.
- 18. 호출 방법은 내가 반응 구성 요소가 구성 요소
- 19. 어떤 업적이 단일성으로 풀렸는지 확인하는 방법이 있습니까?
- 20. , 구성 요소가 존재하는지 여부를 확인하는 방법
- 21. 는 동적으로 구성 요소가
- 22. 다른 반응 구성 요소에 반응 구성 요소를 동적으로 삽입하십시오.
- 23. 플렉스에서 구성 요소가 편집되었는지 확인하는 전역 플래그
- 24. React : 상위 구성 요소가 마운트 된 후 하위 요소 추가
- 25. 어떤 SAS 구성 요소가 설치되었는지 확인하는 방법
- 26. Golang : 세션이 연결/연결 해제되었는지 확인하는 방법
- 27. HTML : 요소가 다른 요소 뒤에 있는지 확인하는 방법이 있습니까?
- 28. React 구성 요소가 업데이트되었는지 확인하는 방법은 무엇입니까?
- 29. 는 JS 구성 요소가
- 30. 구성 요소가 발송하는 이벤트 목록을 가져 오는 방법이 있습니까?
팁 주셔서 감사합니다 ... 문서에서 ... componentDidMount에서 _isMounted 속성을 true로 설정하고 componentWillUnmount에서 false로 설정하십시오. 그러나 이것을 사용하십시오.setState ({mounted : false}); 상태 변경이 즉시 발생하지 않기 때문에 경고를 막기에는 너무 늦게 트리거 할 수 있습니다 - 이것에 대한 클래스 속성을 사용하는 것이 더 낫습니다 ... this.mounted = false - 감사합니다. tho, 이것은 올바른 방향으로 나를 가리 킵니다 – danday74
@ danday74, 예 맞다. 나는 대답을 썼을 때 그 지점을 놓친 것 같습니다. 도움이된다면 답을 upvoting –
그래, 내가 10 일 전에 upvoted :) – danday74