The kind of app that has 60k LOC, dozen of pages, makes 15 fetches per page (e.g. a report with 5 charts and 3 series per chart), reuse data between pages to avoid remaking the same fetches, have 1 or 2 forms synchronized between every page (like dates and selects filters), save the filters into the URL query params to be able to share the report and restore it when you open/refresh the app, and so on.
You end up with code like this at the bottom of your files
myCustomHOC1(
myCustomHOC2(
withRouter(
reduxForm({ form: 'filters', initialValues, destroyOnUnmount: false })(
connect(mapStateToProps, mapActionsToProps)(MyComponent)
)
)
)
)
Although it's probably not that common anymore (as OC said, practices changed), it was a common pattern a few years ago.
In the new project I started last week, I'm using only hooks/context and a few libraries like react-router (useHistory, useParams), react-query (useQuery, useMutation), react-hooks-form (useForm)… and it has been a breath of fresh air. react-query is definitely another "big shift", it completely changed the way I used to think about fetching data and centralize it. It's very good, I highly recommend to try it.