diff --git a/packages/react-dom/src/__tests__/ReactDOMSingletonComponents-test.js b/packages/react-dom/src/__tests__/ReactDOMSingletonComponents-test.js index b1d0a9cb23906..ff6e6968ca31f 100644 --- a/packages/react-dom/src/__tests__/ReactDOMSingletonComponents-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMSingletonComponents-test.js @@ -475,7 +475,7 @@ describe('ReactDOM HostSingleton', () => { expect(hydrationErrors).toEqual([ [ "Hydration failed because the server rendered HTML didn't match the client.", - 'at div', + 'at div ()', ], ]); expect(persistentElements).toEqual([ diff --git a/packages/react-server/src/ReactFizzServer.js b/packages/react-server/src/ReactFizzServer.js index e1e180f2f77aa..cf44e055ca675 100644 --- a/packages/react-server/src/ReactFizzServer.js +++ b/packages/react-server/src/ReactFizzServer.js @@ -924,7 +924,7 @@ function pushServerComponentStack( let name = componentInfo.name; const env = componentInfo.env; if (env) { - name += ' (' + env + ')'; + name += ' [' + env + ']'; } task.componentStack = { tag: 3, diff --git a/packages/shared/ReactComponentStackFrame.js b/packages/shared/ReactComponentStackFrame.js index 34c9487a30692..25f98bd2f4cac 100644 --- a/packages/shared/ReactComponentStackFrame.js +++ b/packages/shared/ReactComponentStackFrame.js @@ -24,6 +24,7 @@ import {disableLogs, reenableLogs} from 'shared/ConsolePatchingDev'; import ReactSharedInternals from 'shared/ReactSharedInternals'; let prefix; +let suffix; export function describeBuiltInComponentFrame(name: string): string { if (enableComponentStackLocations) { if (prefix === undefined) { @@ -33,17 +34,26 @@ export function describeBuiltInComponentFrame(name: string): string { } catch (x) { const match = x.stack.trim().match(/\n( *(at )?)/); prefix = (match && match[1]) || ''; + suffix = + x.stack.indexOf('\n at') > -1 + ? // V8 + ' ()' + : // JSC/Spidermonkey + x.stack.indexOf('@') > -1 + ? '@unknown:0:0' + : // Other + ''; } } // We use the prefix to ensure our stacks line up with native stack frames. - return '\n' + prefix + name; + return '\n' + prefix + name + suffix; } else { return describeComponentFrame(name); } } export function describeDebugInfoFrame(name: string, env: ?string): string { - return describeBuiltInComponentFrame(name + (env ? ' (' + env + ')' : '')); + return describeBuiltInComponentFrame(name + (env ? ' [' + env + ']' : '')); } let reentry = false;