Skip to main content

React Relay Provider

(optional) install react-error-boundary

pnpm add react-error-boundary
import { Suspense } from 'react'
import { RelayEnvironmentProvider } from 'react-relay'
import { relayEnvironment } from './relayEnvironment'
import { ErrorBoundary, FallbackProps } from 'react-error-boundary'

type RelayProviderProps = {
children: React.ReactNode
}

export const RelayProvider: React.FC<RelayProviderProps> = ({ children }) => {
return (
<RelayEnvironmentProvider environment={relayEnvironment}>
<ErrorBoundary FallbackComponent={AppErrorFallback}>
<Suspense fallback={<AppLoading />}>
{children}
</Suspense>
</ErrorBoundary>
</RelayEnvironmentProvider>
)
}

const AppLoading = () => (
<>
Loading...
</>
)

const AppErrorFallback: React.FC<FallbackProps> = ({ error, resetErrorBoundary }) => {
return (
<div role='alert'>
<p>Something went wrong:</p>
<pre>{error.message}</pre>
<button onClick={resetErrorBoundary}>Try again</button>
</div>
)
}

then wrap that around App in main.tsx

// main.tsx
import { createRoot } from 'react-dom/client'

import { RelayProvider } from './providers/RelayProvider'

import App from './App'

createRoot(document.getElementById('root') as HTMLElement).render(
<RelayProvider>
<App />
</RelayProvider>
)