The following will cause an infinite loop. The render() method will be called again and again.
class ToDoItemEditComponentContainer extends React.Component { componentDidMount() { this.props.loadItem(); //load item remotely and put it in the local redux store } componentWillUnmount() { this.props.clearItemLocally(); //remove item from local redux store } render() { throw "some error" } }
Here is why: "As of React 16, errors that were not caught by any error boundary will result in unmounting of the whole React component tree. " (See here). To be more specific,
- render() throws an error
- The react component tree is unmounted
- componentWillUnmount() is called. And something is cleared from the reduxt store or react state
- The component tree will be rendered again since some state has been changed
To fix: Implement componentDidCatch() hook in this component or create a global error boundary as shown in here . When there is a render() error, do not call the render() method any more, or do not change any local data in componentWillUnmount()