![](/img/trans.png)
[英]Next.Js React app with styled components. Warning: Prop `className` did not match. Server: "x" Client: "y"
[英]nextjs: Warning: Prop `className` did not match. Server: "x" Client: "y"
這是我的代碼:
export default function Nav() {
const { userLogin } = useUser()
console.log(userLogin)
return (
<nav className={styles.nav}>
{!userLogin ? (
<Link href={"/login"}><a className={`${styles.top}`}></a></Link>
) : (
<Link href={"/profile"}><a className={`${styles.userLogged}`}></a></Link>
)}
</nav>
)
}
這是useUser
:
export default function useUser(){
var userLogin = false
const cookies = parseCookies()
if (cookies.token) {
userLogin = true
}
return { userLogin }
}
因此,如果userLogin
為false
,則一切正常。
但如果userLogin
為true
,我會收到此錯誤:
Warning: Prop `className` did not match. Server: "x" Client: "y"
當我使用 cookies 時顯示此錯誤。
我不想使用next/dynamic
。 因為點擊時再次dynamic
重新加載組件。
如果 parseCookies 僅發生在客戶端,也就是使用document
,那么接下來的 HTML 將與客戶端不同,這發生在我的 localStorage 上,因為我使用的是window
。
但是因為您使用的是 cookies 您可以從 getInitialProps 的 req 參數中獲取它們:
App.getInitialProps = async ({ ctx }) => {
const { req } = ctx;
const cookies = parseCookies(req ? req.headers.cookie : document.cookie);
return {
pageProps: { cookies }
};
};
如果您使用nookies
,他們與const cookies = parseCookies(ctx)
有一個很酷的集成,它允許您將ctx
作為第一個參數傳遞,如下ctx
:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.