{error.message} : null}
+ {error?.message ? {error.message} : null}
) : null}
diff --git a/packages/react-router/src/Matches.tsx b/packages/react-router/src/Matches.tsx
index cada2373ff..576c40a16f 100644
--- a/packages/react-router/src/Matches.tsx
+++ b/packages/react-router/src/Matches.tsx
@@ -115,7 +115,7 @@ function MatchesInner() {
console.warn(
`Warning: The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`,
)
- console.warn(`Warning: ${error.message || error.toString()}`)
+ console.warn('Warning:', error)
}
: undefined
}
diff --git a/packages/react-router/tests/errorComponent.test.tsx b/packages/react-router/tests/errorComponent.test.tsx
index b5ee4b6709..93586106a3 100644
--- a/packages/react-router/tests/errorComponent.test.tsx
+++ b/packages/react-router/tests/errorComponent.test.tsx
@@ -2,6 +2,7 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'
import { act, cleanup, fireEvent, render, screen } from '@testing-library/react'
import {
+ CatchBoundary,
HeadContent,
Link,
Outlet,
@@ -422,6 +423,62 @@ test('errorComponent receives primitive errors thrown from beforeLoad', async ()
expect(screen.queryByText('About route content')).not.toBeInTheDocument()
})
+test.each([
+ ['false', false],
+ ['zero', 0],
+ ['negative zero', -0],
+ ['bigint zero', 0n],
+ ['empty string', ''],
+ ['null', null],
+ ['undefined', undefined],
+ ['NaN', NaN],
+] as const)('CatchBoundary renders falsy thrown value %s', (_, thrown) => {
+ vi.spyOn(console, 'error').mockImplementation(() => {})
+ const onCatch = vi.fn()
+
+ function ThrowFalsy(): never {
+ throw thrown
+ }
+
+ render(
+