
- Next.js - Home
- Next.js - Overview
- Next.js - Project Setup
- Next.js - Folder Structure
- Next.js - App Router
- Next.js - Page Router
- Next.js Features
- Next.js - Pages
- Next.js - Data Fetching
- Next.js - ISR
- Next.js - Static File Serving
- Next.js - Pre-Rendering
- Next.js - Partial Pre Rendering
- Next.js - Server Side Rendering
- Next.js - Client Side Rendering
- Next.js Routing
- Next.js - Routing
- Next.js - Nested Routing
- Next.js - Dynamic Routing
- Next.js - Parallel Routing
- Next.js - Imperative Routing
- Next.js - Shallow Routing
- Next.js - Intercepting Routes
- Next.js - Redirecting Routes
- Next.js - Navigation and Linking
- Next.js Configuration
- Next.js - TypeScript
- Next.js - Environment Variables
- Next.js - File Conventions
- Next.js - ESLint
- Next.js API & Backend
- Next.js - API Routes
- Next.js - Dynamic API Routes
- Next.js - Route Handlers
- Next.js - API MiddleWares
- Next.js - Response Helpers
- Next.js API Reference
- Next.js - CLI Commands
- Next.js - Functions
- Next.js - Directives
- Next.js - Components
- Next.js - Image Component
- Next.js - Font Component
- Next.js - Head Component
- Next.js - Form Component
- Next.js - Link Component
- Next.js - Script Component
- Next.js Styling & SEO
- Next.js - CSS Support
- Next.js - Global CSS Support
- Next.js - Meta Data
- Next.js Advanced Topics
- Next.js - Error Handling
- Next.js - Server Actions
- Next.js - Fast Refresh
- Next.js - Internationalization
- Next.js - Authentication
- Next.js - Session Management
- Next.js - Authorization
- Next.js - Caching
- Next.js - Data Caching
- Next.js - Router Caching
- Next.js - Full Route Caching
- Next.js - Request Memoization
- Next.js Performance Optimization
- Next.js - Optimizations
- Next.js - Image Optimization
- Next.js - Lazy Loading
- Next.js - Font Optimization
- Next.js - Video Optimization
- Next.js - Script Optimization
- Next.js - Memory Optimization
- Next.js - Using OpenTelemetry
- Next.js - Package Bundling Optimization
- Next.js Testing
- Next.js - Testing
- Next.js - Testing with Jest
- Next.js - Testing with Cypress
- Next.js - Testing with Vitest
- Next.js - Testing with Playwright
- Next.js Debugging & Deployment
- Next.js - Debugging
- Next.js - Deployment
- Next.js Useful Resources
- Next.js - Interview Questions
- Next.js - Quick Guide
- Next.js - Useful Resources
- Next.js - Discussion
Next.js - use client Directive
The "use client" Directive
The "use client" is a Next.js directive used to specify that a component should be rendered on the client-side. Client side components are run in the user's browser, and are not bundled with the server-side code while application build. You can make client side component for
- Creating interactive UI that require client-side JavaScript
- Component that include state management
- Component that include event handling, and access to browser APIs.
Example
To make a component render on the client-side, add the "use client" directive at the top of the component file. See the code below.
// /counter/page.tsx "use client" import { useState } from 'react' export default function Hello() { const [count, setCount] = useState(0) return ( <div> <h1>Hello, world!</h1> <p>You clicked {count} times.</p> <button onClick={() => setCount(count + 1)}> Click me </button> </div> ) }
Output
The image below shows the output of the code above. You can see that when we open counter page, a new JavaScript file is fetched from the server.

Create Client Component inside Server Component
Next.js also allows you to create client components inside server components. By combining client and server components, you can create application that optimized for performance and interactive for the user. For example, you can create a server component that fetches data from an API and inside that add a button as a client component, so that the button will be interactive according to the user's states.
Example
In the code below, we have a server component which displays a header element. Inside that we have imported a client component that displays a counter element. See the code below.
import Header from './header' import Counter from './counter' // This is a Client Component export default function Page() { return ( <div> <Header /> <Counter /> </div> ) }
Output
The image below shows the output of the code above. You can see that when we open counter page, a new JavaScript file is fetched from the server.
