Menu
Coddy logo textTech

A Linha 'use client'

Parte da seção Essenciais do Next.js do Journey de React da Coddy — lição 19 de 47.

'use client' parece uma string perdida que alguém esqueceu de deletar. Não é: é uma diretiva, e tem duas regras que valem a pena memorizar, porque ambas costumam pegar as pessoas de surpresa.

Regra 1: deve ser a primeira linha

Antes dos imports. Antes dos comentários que importam. A primeira coisa no arquivo:

'use client';

import { useState } from 'react';

Coloque-a abaixo de um import e ela deixa de ser uma diretiva: torna-se uma expressão de string inútil, o arquivo permanece como um server component e você recebe o erro de hook como se nunca a tivesse digitado. Esta custa tempo real às pessoas, porque a linha está bem ali no arquivo, parecendo correta.

Regra 2: isso marca o arquivo inteiro

Não há como marcar apenas um componente. Se um arquivo tem a diretiva, tudo o que for definido nele é código client:

'use client';

function Row() { … }        // cliente
export default function Table() { … }   // cliente também

E isso se espalha para baixo: qualquer coisa que um componente client importa e renderiza se torna código client também. Uma diretiva no topo de um arquivo grande pode silenciosamente enviar muito JavaScript para o navegador, que é exatamente o problema que a próxima lição resolve.

challenge icon

Desafio

Fácil

components/Counter.jsx tem uma linha 'use client' no lugar errado. O app falha com o erro de hook mesmo assim.

  1. Mova 'use client'; para que seja a primeira linha de components/Counter.jsx, acima do import.

Ambos os componentes nesse arquivo, Counter e o ResetButton que ele renderiza, tornam-se client components a partir dessa única linha. Você não precisa de uma segunda diretiva e não deve adicionar uma.

Experimente você mesmo

import './globals.css';

export const metadata = {
    title: 'My App',
};

export default function RootLayout({ children }) {
    return (
        <html lang="en">
            <body>
                {children}
            </body>
        </html>
    );
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Essenciais do Next.js