You will see these patterns in old codebases. You should not write them in new code. Knowing why each one died is more useful than memorizing the death dates.
Class components
The original React component model. class Foo extends React.Component, lifecycle methods (componentDidMount, componentWillUnmount, shouldComponentUpdate), this.state, this.setState().
Why they faded: lifecycle methods scattered related logic across the class (data fetching split between mount and update), this binding was a perpetual footgun, and refactoring stateful logic between components was painful. Hooks (2018) solved all three.
You won't write a new class component in 2026. The official React docs no longer teach them as the primary path. If you maintain a codebase with classes, fine — but new files are function components with hooks.
Higher-order components (HOCs)
An HOC is a function that takes a component and returns a new component. The pattern (withRouter, withRedux, connect(mapStateToProps)(Component)) was the pre-hooks way to share stateful logic. You'd compose withFoo(withBar(withBaz(MyComponent))) and pray the prop types still made sense.
Why they died: the wrapping was opaque (your component disappeared inside three layers of magic), prop collisions were silent, TypeScript couldn't easily infer the result, and the wrapper chain made stack traces painful. Custom hooks replaced 99% of HOCs by being explicit about what you're consuming.
Render props
A pattern where a component takes a function as children (or another prop) and calls it with state to render. <Mouse>{(pos) => <p>{pos.x}, {pos.y}</p>}</Mouse>.
Why they died: same reason. The pattern was inventive in 2017 but a custom hook (const pos = useMousePosition()) is cleaner, type-checks better, and doesn't nest your JSX inside callbacks.
What you'll still see in real codebases
Three live exceptions you don't have to fight:
React.memo— technically an HOC, but it's a tiny opt-in for memoization, not a logic-sharing pattern. Still fine to use (Track 7 covers when).Suspensewrapping any component — this is composition, not a logic-sharing HOC.- Error boundaries — still class-based in React core (an error-boundary hook never landed). You'll write one class in your career; Track 5 lesson 3 shows it.