해결된 질문
22.12.05 17:50 작성
·
271
·
수정됨
0
안녕하세요 제로초님! 항상 좋은 강의해 주셔서 감사드립니다! 다름이 아니라 setTimout()
오류에 대해서 제가 이해한 내용을 적어 보았는데 제대로 이해했는지 확인을 부탁드리고자 질문을 작성하게 됐습니다!
<이해한 내용>
setTimeout()
을 제거하지 않았을 때 발생하는 에러: (Lotto 컴포넌트의 부모 컴포넌트가 존재한다고 가정) 부모 컴포넌트가 Lotto를 없앴을 때 화면상에서 Lotto 컴포넌트는 사라졌지만 코드상에서는 여전히 존재하기 때문에 부모 컴포넌트가 렌더링 될 때마다 자식 컴포넌트인 Lotto 또한 렌더링 된다. 이로 인해 Lotto 컴포넌트의 componentDidMount()
에 있는 setTimeout()
이 계속 실행되어 메모리 누수가 발생하거나 의도하지 않은 에러가 발생하게 된다. 따라서 오류를 사전에 방지하기 위해 setTimeout()
을 사용했을 경우 compnentWillUnmount()
에서 항상 제거해 주어야 한다.
답변 1
1
2022. 12. 05. 17:55
아뇨, 부모 컴포넌트가 사라지면 자식 컴포넌트도 사라지는 게 맞습니다. 렌더링도 되지 않고요. 다만 componentDidMount에서 setTimeout 했던 내용은 사라지지 않아서 컴포넌트가 사라진 후에도 한 번 실행이 됩니다(setTimeout은 한 번만 실행됩니다, setInterval이 주기적으로 계속 실행되고요).
그 한 번이 실행될 때 오류가 발생할 수 있어서 componentWillUnmount에서 제거해줘야 합니다.
2022. 12. 05. 18:58
아하! 이해했습니다! 답변 감사드립니다 : )