Before React 16, class components followed a three-stage lifecycle: Mounting, Updating, and Unmounting. Several of these methods (marked as unsafe) were later deprecated to support asynchronous rendering (Concurrent Rendering) and the Fiber reconciler.
// Mounting
constructor()
componentWillMount() // ⚠️ Deprecated
render()
componentDidMount()
// Updating
componentWillReceiveProps(nextProps) // ⚠️ Deprecated
shouldComponentUpdate(nextProps, nextState)
componentWillUpdate() // ⚠️ Deprecated
render()
componentDidUpdate(prevProps, prevState)
// Unmounting
componentWillUnmount()