اذهب إلى المحتوى
  • 0

خطأ No router instance found. You should only use "next/router" on the client side of your app في مشروع Next.js

Abdelrahman Mostafa10

السؤال

لقد حاولت إنشاء أداة تبديل الثيم theme switcher في Next.js، حيث يتغير الثيم عندما أنقر على زر، ولكن يظهر خطأ عند النقر على الزر ولم أجد حلاً لتلك المشكلة. 

وذلك هو الكود:

// eslint-disable-next-line react-hooks/rules-of-hooks
const [Theme, setTheme] = useState("light");

function themeSwitcher() {
  if (Theme === "light") {
    setTheme("dark");
    console.log(Theme);
    Router.push({
      pathname: "/layout",
      query: Theme,
    });
  } else {
    setTheme("light");
    console.log(Theme);
    Router.push({
      pathname: "/layout",
      query: Theme,
    });
  }
}

return (
  <div>
    <button onClick={themeSwitcher}>light/dark</button>
  </div>
);

وتلك هي المشكلة التي تظهر لي:

tGw8H.thumb.jpg.e0c6cdc5e53d610eaf8b664784c9a2f3.jpg

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

الخطأ ينبهك أنك تحاول استخدام next/router في جهة الخادم server-side.

السبب أن جهة الخادم server-side عبارة عن بيئة تطوير تستخدم إطار عمل Next.js وهذا الإطار لا يدعم Router لأنه يخص المتصفح،

حاول تجربة الشيفرات التالية:

import React, { useEffect } from "react";
import { useRouter } from "next/router";

const [Theme, setTheme] = useState("light");

function themeSwitcher() {
  const router = useRouter();

  useEffect(() => {
    if (Theme === "light") {
      setTheme("dark");
      console.log(Theme);
      
      router.push({
        pathname: "/layout",
        query: Theme,
      });
    } else {
      setTheme("light");
      console.log(Theme);
      
      router.push({
        pathname: "/layout",
        query: Theme,
      });
    }
    //لاحظ أن الخطاف سيعتمد على قيمة الكائن
    // Theme
  }, [Theme]); 
}

return (
  <div>
    <button onClick={themeSwitcher}>light/dark</button>
  </div>
);

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...