docs/guides/setup-problem-detection-and-error-recovery.md
"People make mistakes. It's all a part of growing up and you never really stop growing" - Duke of nuts (Adventure time)
For detectable setup problems react-beautiful-dnd will log some information console for development builds (process.env.NODE_ENV !== 'production'). These logs are stripped from productions builds to save kbs and to keep the console clean. Keep in mind, that any setup errors that are logged will cause things to break in fun and interesting ways - so it is worth ensuring that there are none.
Some setup problems will cause errors. These are logged with console.error. We do not throw these errors. This is because an infinite loop can be created.
If we threw setup errors, here is the infinite loop:
useEffect) and throwncomponentDidCatchWe could work around this loop condition, but it would lead to conditionally throwing, and otherwise logging. It is also tricky to avoid double logging of errors. Given that we are trying to recover the React tree, there is not a lot of value in throwing any setup problem in the first place. So we just log the problem in the console.
Here are a few guides on how to drop development only code from your production builds:
If you want to disable the warnings in development, you just need to update a flag on the window:
// disable all react-beautiful-dnd development warnings
window['__react-beautiful-dnd-disable-dev-warnings'] = true;
Note: this will not strip the messages from your production builds. See above for how to do that
An error can occur when:
Error is explicitly thrown by react-beautiful-dnd (an rbd error)Error is thrown by something else (a non-rbd error)SyntaxError, TypeError)React error boundaries do not catch all errors that can occur in rbd. So rbd uses a React error boundary as well as a window error event listener.
rbd error boundarythrow the error for your own error boundary. We will not recover from errors that are not caused explicitly by rbd. A run time error (such as a TypeError) that is caused by rbd will not be recovered. rbd will only recover from explicitly thrown rbd errors.window error listenerevent.preventDefault() on the event. This marks the event as consumed. See how we use DOM events. It will also prevent any 'uncaught error' warnings in your console.