React has actually done a great job of providing clear upgrade paths, assuming you don't try to jump several major versions at a time.
They generally provide deprecation warnings at least 1 major version before actually breaking/removing an existing API. They have also started providing codemod scripts to help migrate a large codebase (though I've found find/replace sufficient for a lot of them)
My bigger problem has been relying on 3rd party components that hold me back due to some incompatibility they don't address for months.
The biggest pain I've experienced is updating react-router. I've run into cryptic failures each time, and googling usually turns up answers for the previous (or even next/beta) version.
They generally provide deprecation warnings at least 1 major version before actually breaking/removing an existing API. They have also started providing codemod scripts to help migrate a large codebase (though I've found find/replace sufficient for a lot of them)
My bigger problem has been relying on 3rd party components that hold me back due to some incompatibility they don't address for months.