Menu
CoddyTech

Dòng 'use client'

Thuộc phần Kiến thức thiết yếu về Next.js trong hành trình React của Coddy. Bài học 19 trên 47.

'use client' trông như một chuỗi thừa mà ai đó quên xóa. Nhưng không phải vậy: đây là một chỉ thị, và có hai quy tắc đáng ghi nhớ vì cả hai đều dễ khiến bạn mắc lỗi.

Quy tắc 1: phải là dòng đầu tiên

Trước các dòng import. Trước những chú thích quan trọng. Ngay dòng đầu tiên trong tệp:

'use client';

import { useState } from 'react';

Đặt dòng này bên dưới một câu lệnh import thì nó không còn là chỉ thị nữa: nó trở thành một biểu thức chuỗi vô nghĩa, tệp vẫn là một thành phần máy chủ và bạn gặp lỗi về hook như thể mình chưa từng nhập dòng đó. Lỗi này khiến mọi người mất khá nhiều thời gian vì dòng đó vẫn nằm ngay trong tệp, trông có vẻ đúng.

Quy tắc 2: nó đánh dấu toàn bộ tệp

Không có cách nào để đánh dấu riêng một thành phần. Nếu một tệp có chỉ thị này, mọi thứ được định nghĩa trong đó đều là code phía client:

'use client';

function Row() { … }        // phía máy khách
export default function Table() { … }   // cũng ở phía máy khách

Và ảnh hưởng này lan xuống dưới: mọi thứ mà một thành phần phía máy khách (client component) nhập vào và hiển thị cũng trở thành code phía máy khách. Một chỉ thị ở đầu tệp lớn có thể âm thầm gửi rất nhiều JavaScript đến trình duyệt, và đó chính là vấn đề mà bài học tiếp theo giải quyết.

challenge icon

Thử thách

Dễ

components/Counter.jsx có dòng 'use client' ở sai vị trí. Ứng dụng vẫn gặp lỗi hook.

  1. Di chuyển 'use client'; lên dòng đầu tiên của components/Counter.jsx, phía trên câu lệnh import.

Cả hai thành phần trong tệp đó, Counter và ResetButton mà nó hiển thị, đều trở thành thành phần phía máy khách nhờ dòng đó. Bạn không cần chỉ thị thứ hai và không nên thêm chỉ thị đó.

Tự làm thử

import './globals.css';

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

export default function RootLayout({ children }) {
    return (
        <html lang="en">
            <body>
                {children}
            </body>
        </html>
    );
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức thiết yếu về Next.js