Giải quyết lỗi hydration trong Next.js: Nguyên nhân và cách khắc phục

tsudev· 12/10/2026

Giới thiệu về lỗi hydration

Lỗi hydration trong Next.js là một vấn đề thường gặp khi xây dựng ứng dụng React. Lỗi này xảy ra khi quá trình hydratization (làm mới) của React không thành công, dẫn đến sự khác biệt giữa mã HTML được tạo ra bởi phía server và phía client.

Khi sử dụng Next.js, ứng dụng của bạn sẽ được render phía server trước, sau đó phía client sẽ tiếp tục render và gắn kết với các sự kiện. Nếu mã HTML được tạo ra bởi phía server và phía client khác nhau, React sẽ không thể gắn kết được và sẽ gây ra lỗi hydration.

Nguyên nhân của lỗi hydration

Nguyên nhân của lỗi hydration thường là do sự khác biệt giữa mã HTML được tạo ra bởi phía server và phía client. Điều này có thể xảy ra do nhiều lý do, chẳng hạn như:
  • Sử dụng các thư viện hoặc component không tương thích với Next.js.
  • Mã HTML được tạo ra bởi phía server và phía client khác nhau do sự khác biệt trong quá trình render.
  • Sử dụng các biến hoặc hàm không được định nghĩa trong cả hai phía server và client.

Ví dụ về lỗi hydration

Giả sử chúng ta có một component như sau:
jsx
import { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

export default Counter;
Nếu chúng ta sử dụng component này trong một trang Next.js, lỗi hydration có thể xảy ra nếu mã HTML được tạo ra bởi phía server và phía client khác nhau.

Cách khắc phục lỗi hydration

Để khắc phục lỗi hydration, chúng ta cần đảm bảo rằng mã HTML được tạo ra bởi phía server và phía client là giống nhau. Dưới đây là một số cách để khắc phục lỗi hydration:
  • Sử dụng các thư viện hoặc component tương thích với Next.js.
  • Đảm bảo rằng mã HTML được tạo ra bởi phía server và phía client là giống nhau.
  • Sử dụng các biến hoặc hàm được định nghĩa trong cả hai phía server và client.
Một cách khác để khắc phục lỗi hydration là sử dụng thuộc tính suppressHydrationWarning trong React. Thuộc tính này cho phép chúng ta bỏ qua lỗi hydration và tiếp tục render ứng dụng.
jsx
import { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div suppressHydrationWarning={true}>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

export default Counter;
Tuy nhiên, cách này không được khuyến khích vì nó có thể gây ra các vấn đề khác trong ứng dụng.

Kết luận

Lỗi hydration trong Next.js là một vấn đề thường gặp khi xây dựng ứng dụng React. Để khắc phục lỗi này, chúng ta cần đảm bảo rằng mã HTML được tạo ra bởi phía server và phía client là giống nhau. Chúng ta cũng có thể sử dụng các cách khác như sử dụng các thư viện hoặc component tương thích với Next.js, đảm bảo rằng mã HTML được tạo ra bởi phía server và phía client là giống nhau, và sử dụng các biến hoặc hàm được định nghĩa trong cả hai phía server và client.

Nguồn tham khảo: https://dev.to/coderifki/hydration-errors-in-nextjs-what-they-are-and-how-to-fix-them-1cjb