Implementing error boundaries that provide good UX and useful debugging info.
Error boundaries catch rendering errors. Here's how to make them useful.
Don't wrap your entire app in one boundary. Wrap features individually so one broken component doesn't take down everything.
Give users a way to retry. Pass a resetError function that clears the error state.