由于某种原因,我出现了这个错误
而这个=>
我相信这个错误与我将模式从亮模式更改为暗模式有关。以下是我的导航栏.jsx=>“
// function to toggle between dark mode / light
const toggleTheme = () => {
setTheme((prevTheme) => (prevTheme === "light" ? "dark" : "light"));
};"
<div id="navbar-container" className={`flex justify-between z-10 items-center top-0 pt-3 px-4 w-full sticky ${theme === "dark" ? "bg-slate-950": "bg-white"}`}>
这是主题提供程序所在的App.jsx(我使用shadcn-ui作为主题提供程序)=>
const Navigation = () => {
const location = useLocation();
const loginRoute = location.pathname === '/login';
const emailConfirmRoute = location.pathname === "/success/confirm";
// Determine which component to render based on the route
const renderNavbar = loginRoute || emailConfirmRoute ? null : (location.pathname === '/' ? <Navbar /> : <DashboardNavbar />);
return renderNavbar;
};
const FooterComponent = () => {
const location = useLocation();
const loginRoute = location.pathname === '/login';
const renderFooter = loginRoute ? null : (location.pathname === '/' ? <Footer /> : null);
return renderFooter;
};
// Create context for the user
export const UserContext = createContext(null);
// Custom hook to use the user context
export const useUser = () => useContext(UserContext);
const App = () => {
const [user, setUser] = useState(null);
// useEffect for auth to determine if user is authenticated or not
useEffect(() => {
// Define an async function to get the session
async function getSession() {
try {
// Wait for the session promise to resolve
const {data: { session }} = await supabase.auth.getSession()
// If there is a session, set the user state to the session's user information
if (session) {
console.log("Session object:", session);
if (session.user && session.user.aud) {
console.log("Session aud:", session.user?.aud)
} else {
console.log("Session is undefined")
}
setUser(session.user);
} else {
console.log('No active session: User is not logged in');
}
} catch (error) {
console.error('Error fetching session:', error);
}
}
// Call the async function
getSession();
}, [setUser]);
return (
<ThemeProvider defaultTheme='light' storageKey='vite-ui-theme'>
<UserContext.Provider value={{ user, setUser }}>
<Router>
<div>
{/* Render the appropriate component based on the route */}
<Navigation/>
<Routes>
<Route path="/" element={<Home />} />
<Route path='/create' element={<Dashboard />} />
<Route path='/login' element={<Login />} />
<Route path='/success/confirm' element={<ConfirmEmail />} />
</Routes>
<FooterComponent />
</div>
</Router>
</UserContext.Provider>
</ThemeProvider>
);
};
export default App;"
并且主题提供者.jsx=>
/* eslint-disable react/prop-types */
import { createContext, useContext, useEffect, useState } from "react";
const ThemeProviderContext = createContext(null);
export function ThemeProvider({
children,
defaultTheme = "system",
storageKey = "vite-ui-theme",
...props
}) {
const [theme, setTheme] = useState(
() => localStorage.getItem(storageKey) || defaultTheme
);
useEffect(() => {
const root = window.document.documentElement;
root.classList.remove("light", "dark");
if (theme === "system") {
const systemTheme = window.matchMedia("(prefers-color-scheme: dark)")
.matches
? "dark"
: "light";
root.classList.add(systemTheme);
return;
}
root.classList.add(theme);
}, [theme]);
const value = {
theme,
setTheme: (theme) => {
localStorage.setItem(storageKey, theme);
setTheme(theme);
},
};
return (
<ThemeProviderContext.Provider {...props} value={value}>
{children}
</ThemeProviderContext.Provider>
);
}
// eslint-disable-next-line react-refresh/only-export-components
export const useTheme = () => {
const context = useContext(ThemeProviderContext);
if (context === undefined)
throw new Error("useTheme must be used within a ThemeProvider");
return context;
};
现在奇怪的部分=>此错误
只有
当我登录到使用超级数据库进行身份验证的应用程序时会发生这种情况。例如,当我清除浏览器cahce或在icognito中查看应用程序时,一切都按预期进行
包括…在内
从亮主题变为暗主题,反之亦然。
这意味着我的身份验证出现了问题,导致了此错误。
如有任何帮助,我们将不胜感激。真的不知道从哪里去找答案。