From da50985ede02d07e081141c1eb9b989dd6e82487 Mon Sep 17 00:00:00 2001 From: Anton Korzunov Date: Tue, 27 Aug 2019 18:55:14 +1000 Subject: [PATCH] fix: error overlay could fail by itself --- README.md | 10 +++---- src/errorReporter.js | 62 ++++++++++++++++++++++++-------------------- 2 files changed, 39 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 06c738d7d..eb38f88df 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ export default hot(App); module.exports = { entry: ['react-hot-loader/patch', './src'], // ... - } + }; ``` 4. If you need hooks support, use [`@hot-loader/react-dom`](#hot-loaderreact-dom) @@ -123,10 +123,10 @@ module.exports = { // ... resolve: { alias: { - 'react-dom': '@hot-loader/react-dom' - } - } -} + 'react-dom': '@hot-loader/react-dom', + }, + }, +}; ``` ### Old API diff --git a/src/errorReporter.js b/src/errorReporter.js index 69581866a..ca7fbc992 100644 --- a/src/errorReporter.js +++ b/src/errorReporter.js @@ -68,39 +68,45 @@ const errorHeader = (component, componentStack) => { return null; }; -const mapError = ({ error, errorInfo, component }) => ( - -

- {errorHeader(component, errorInfo && errorInfo.componentStack)}{' '} - {error.toString ? error.toString() : (error && error.message) || 'undefined error'} -

- {errorInfo && errorInfo.componentStack ? ( -
-
Stack trace:
-
    - {error.stack - .split('\n') - .slice(1, 2) - .map((line, i) =>
  • {line}
  • )} -
    - {errorInfo.componentStack - .split('\n') - .filter(Boolean) - .map((line, i) =>
  • {line}
  • )} -
-
- ) : ( - error.stack && ( +const mapError = ({ error, errorInfo, component }) => { + if (!error) { + error = { message: 'undefined error' }; + } + + return ( + +

+ {errorHeader(component, errorInfo && errorInfo.componentStack)}{' '} + {error.toString ? error.toString() : (error && error.message) || 'undefined error'} +

+ {errorInfo && errorInfo.componentStack ? (
Stack trace:
    - {error.stack.split('\n').map((line, i) =>
  • {line}
  • )} + {error.stack + .split('\n') + .slice(1, 2) + .map((line, i) =>
  • {line}
  • )} +
    + {errorInfo.componentStack + .split('\n') + .filter(Boolean) + .map((line, i) =>
  • {line}
  • )}
- ) - )} -
-); + ) : ( + error.stack && ( +
+
Stack trace:
+
    + {error.stack.split('\n').map((line, i) =>
  • {line}
  • )} +
+
+ ) + )} +
+ ); +}; class ErrorOverlay extends React.Component { state = {