I already used auth from kinde. Firstly I check user login auth, so I take the condition for when the user is login in our system I show the logout button UI to the page. When the user is not able to login I show the register vs login button UI to the page. But I got the hydration error when I run the code. IDK. what cause this error is happened. what wrong?
I’m really stuck on this error. Please help.
// components/UserNav.tsx
'use client';
import React, { useEffect, useState } from "react";
import Image from "next/image";
import default_user from "../public/plain_user.webp";
import { MenuIcon } from "lucide-react";
import { getKindeServerSession } from "@kinde-oss/kinde-auth-nextjs/server";
import {
RegisterLink,
LoginLink,
LogoutLink,
} from "@kinde-oss/kinde-auth-nextjs/components";
import {
DropdownMenu,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuItem,
} from "./ui/dropdown-menu";
const UserNav: React.FC = () => {
const [user, setUser] = useState<string | null>(null);
useEffect(() => {
const fetchUser = async () => {
const { getUser } = getKindeServerSession();
const userData = await getUser();
console.log(userData)
};
fetchUser();
}, []);
return (
<DropdownMenu>
<DropdownMenuTrigger>
<div className="rounded-full border px-2 py-2 lg:px-4 lg:py-2 flex items-center gap-x-3">
<MenuIcon className="w-6 h-6 lg:w-5 lg:h-5" />
<Image
src={default_user}
alt="user"
className="rounded-full w-8 h-8 hidden lg:block"
/>
</div>
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="w-[200px]">
{user ? (
<>
<DropdownMenuItem>
<LogoutLink className="w-full">Logout</LogoutLink>
</DropdownMenuItem>
</>
) : (
<>
<DropdownMenuItem>
<RegisterLink className="w-full">Register</RegisterLink>
</DropdownMenuItem>
<DropdownMenuItem>
<LoginLink className="w-full">Login</LoginLink>
</DropdownMenuItem>
</>
)}
</DropdownMenuContent>
</DropdownMenu>
);
};
export default UserNav;