<ClerkLoaded>
The <ClerkLoaded>
component guarantees that the Clerk object has loaded and will be available under window.Clerk
. This allows you to wrap child components to access the Clerk
object without the need to check it exists.
Usage
import { ClerkProvider, ClerkLoaded, ClerkLoading } from '@clerk/nextjs'
import './globals.css'
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<ClerkProvider>
<html lang="en">
<body>
<ClerkLoaded>{children}</ClerkLoaded>
</body>
</html>
</ClerkProvider>
)
}
Once you have wrapped your app with <ClerkLoaded>
, you can access the Clerk
object without the need to check if it exists.
declare global {
interface Window {
Clerk: any
}
}
export default function Home() {
return <div>This page uses Clerk {window.Clerk.version}; </div>
}
import '@/styles/globals.css'
import { ClerkLoaded, ClerkProvider } from '@clerk/nextjs'
import { AppProps } from 'next/app'
function MyApp({ Component, pageProps }: AppProps) {
return (
<ClerkProvider {...pageProps}>
<ClerkLoaded>
<Component {...pageProps} />
</ClerkLoaded>
</ClerkProvider>
)
}
export default MyApp
Once you have wrapped your app with <ClerkLoaded>
, you can access the Clerk
object without the need to check if it exists.
declare global {
interface Window {
Clerk: any
}
}
export default function Home() {
return <div>This page uses Clerk {window.Clerk.version}; </div>
}
import { useEffect } from 'react'
import { ClerkLoaded, ClerkProvider } from '@clerk/clerk-react'
declare global {
interface Window {
Clerk: any
}
}
function App() {
return (
<ClerkProvider publishableKey={`YOUR_PUBLISHABLE_KEY`}>
<ClerkLoaded>
<Page />
</ClerkLoaded>
</ClerkProvider>
)
}
function Page() {
useEffect(() => {
// no need to check if window.Clerk exists
document.title = 'This page uses Clerk ' + window.Clerk.version
}, [])
return <div>The content </div>
}
export default App
import { ClerkLoaded } from '@clerk/remix'
export default function Index() {
return (
<div>
<ClerkLoaded>
<div>Clerk is loaded</div>
<p>{window.Clerk.version}</p>
</ClerkLoaded>
</div>
)
}
import { ClerkLoaded } from '@clerk/clerk-expo'
import { Text, View } from 'react-native'
export default function Screen() {
return (
<View>
<ClerkLoaded>
<Text>Clerk is loaded</Text>
<Text>{window.Clerk?.version}</Text>
</ClerkLoaded>
</View>
)
}
Feedback
Last updated on