Next.js 1 دقيقة للقراءة 937 مشاهدات

كيفية إصلاح أخطاء "عدم تطابق الترطيب" في Next.js 15

افهم وأصلح أخطاء عدم تطابق الترطيب عند استخدام مكونات الخادم في Next.js 15.

React hydration

المشكلة

Error: Hydration failed because the initial UI does not match
what was rendered on the server.

لماذا يحدث هذا

يختلف HTML المُصيَّر من الخادم عن HTML المُصيَّر من العميل. الأسباب الشائعة:

  • تنسيق التاريخ/الوقت
  • واجهات خاصة بالمتصفّح فقط
  • قيم عشوائية
  • بيانات خاصة بالمستخدم

الحل 1: كبح تحذير الترطيب

// For timestamps
<time suppressHydrationWarning>
    {new Date().toLocaleString()}
</time>

الحل 2: useEffect للشيفرة الخاصة بالعميل

'use client';

import { useState, useEffect } from 'react';

export default function ClientTime() {
    const [time, setTime] = useState('');

    useEffect(() => {
        setTime(new Date().toLocaleString());
    }, []);

    if (!time) return null; // or skeleton

    return <span>{time}</span>;
}

الحل 3: الاستيراد الديناميكي مع ssr: false

import dynamic from 'next/dynamic';

const ClientOnlyChart = dynamic(
    () => import('./Chart'),
    { ssr: false }
);

الحل 4: التحقّق من بيئة المتصفّح

'use client';

export default function BrowserOnly({ children }) {
    const [mounted, setMounted] = useState(false);

    useEffect(() => {
        setMounted(true);
    }, []);

    if (!mounted) return null;

    return children;
}

أفضل الممارسات

  • أبقِ مكوّنات الخادم افتراضية
  • استخدم 'use client' فقط عند الحاجة
  • انقل واجهات المتصفّح إلى useEffect
  • استخدم تنسيق تاريخ متّسقاً
مشاركة هذه المقالة:
ES
كتبه

Edrees Salih

مهندس برمجيات متكامل يتمتع بخبرة 9 سنوات. شغوف ببناء حلول قابلة للتطوير ومشاركة المعرفة مع مجتمع المطورين.

عرض الملف الشخصي

التعليقات (0)

اترك تعليقًا

لن يتم نشر بريدك الإلكتروني.

لا توجد تعليقات بعد. كن أول من يشارك أفكاره!

مقالات ذات صلة

مقالات ذات صلة

هل تحتاج مساعدة في مشروعك؟

احجز استشارة مجانية لمدة 30 دقيقة لمناقشة تحدياتك التقنية واستكشاف الحلول معًا.