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

السؤال

نشر

لقد حاولت إنشاء أداة تبديل الثيم 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...