Setting the file. One moment.
Skill 12 · Clerk Next.js Patterns
Subchapter 12.5
references/server-vs-client.mdMarkdown2 KBView on GitHub
await auth()// WRONG
Also bundled
Evals// Server Components
import { auth, currentUser } from '@clerk/nextjs/server';
// Client Components
'use client';
import { useAuth, useUser } from '@clerk/nextjs';import { auth, currentUser } from '@clerk/nextjs/server';
export default async function DashboardPage() {
const { isAuthenticated } = await auth();
if (!isAuthenticated) return <div>Please sign in</div>;
const user = await currentUser();
return <h1>Welcome, {user?.firstName}!</h1>;
}Core 2 ONLY (skip if current SDK):
isAuthenticatedis not available. Useconst { userId } = await auth()and checkif (!userId)instead.
'use client';
import { useUser, useAuth } from '@clerk/nextjs';
export function UserDashboard() {
const { isLoaded, isSignedIn, user } = useUser();
const { signOut } = useAuth();
if (!isLoaded) return <div>Loading...</div>;
if (!isSignedIn) return <div>Not signed in</div>;
return (
<div>
<p>Hello, {user.firstName}!</p>
<button onClick={() => signOut()}>Sign out</button>
</div>
);
}// Server: fetch initial data
import { currentUser } from '@clerk/nextjs/server';
import { ProfileForm } from './ProfileForm';
export default async function ProfilePage() {
const user = await currentUser();
if (!user) return <div>Please sign in</div>;
return <ProfileForm initialData={{ firstName: user.firstName }} />;
}
// Client: handle interactions
'use client';
import { useUser } from '@clerk/nextjs';
export function ProfileForm({ initialData }) {
const { user } = useUser();
return <form>...</form>;
}Use <Show> for client-side conditional rendering based on auth state:
import { Show } from '@clerk/nextjs';
<Show when="signed-in" fallback={<div>Please sign in</div>}>
<Dashboard />
</Show>Core 2 ONLY (skip if current SDK): Use
<SignedIn>and<SignedOut>components instead of<Show>.