Hint
RSC run exclusively on the server, never ship to client, can be async — SSR renders client components on the server too
Server Components run ONLY on the server. Their code is never sent to the browser. They can be async, access databases directly, and use server-only secrets.
Key differences from SSR:
// ✅ Server Component — async, DB access, no useState
// app/users/page.tsx (in Next.js App Router)
async function UsersPage() {
const users = await db.query('SELECT * FROM users'); // direct DB, no API needed
return ;
}
// ✅ Client Component — interactive, uses hooks
'use client';
function UserList({ users }) {
const [filter, setFilter] = useState('');
return (
<>
setFilter(e.target.value)} />
{users.filter(u => u.name.includes(filter)).map(u => {u.name})}
>
);
}
// Composing — Server component renders Client component (passes serializable props)
// ❌ Client component CANNOT import Server component
// ✅ Server component can import Client component