簡體   English   中英

如何使用 NextJS 動態添加樣式表?

[英]How can I add a stylesheet dynamically with NextJS?

在我的 nextJS 應用程序中,我需要根據從數據庫接收到的用戶偏好動態加載樣式表。

因此,在我的頁面中,我將其添加到 Head (next/head) 中,如下所示:

<Head>
<link rel="stylesheet" href={`/fonts/${type}/stylesheet.css`}></link>
</Head>

但是,這在開發模式的控制台中給我一個警告:

Do not add stylesheets using next/head (see <link rel="stylesheet"> tag with href="/fonts/cal/stylesheet.css"). Use Document instead. 
See more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component

樣式表本身包含字體:

@font-face {
  font-family: "Cal Sans";
  src: url("CalSans-SemiBold.woff2") format("woff2"),
    url("CalSans-SemiBold.woff") format("woff");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

由於用戶的首選項存儲在數據庫中,並且我通過查詢收到此值,所以我不知道如何將它添加到 Document.js 文件中。

我真的很感激這方面的任何幫助。

雖然可以在您的主要應用程序組件中動態導入 CSS 文件(您可以查看本指南中的示例),但我建議采用不同的解決方案。

在您的應用程序中包含所有樣式表,但使其 styles 僅在html (或body )元素具有特定 class 時適用。然后您需要做的就是根據用戶偏好修改該 class。

// styles.css
body.themeFoo #container {
  // some styles...
}

這是暗模式的許多實現,例如在 tailwind CSS 中。我相信這是解決您的問題的更好模式。

next.js 使用 React,所以也許可以嘗試使用useState 鈎子,或者您可以更改 herf 屬性

import { Html, Head, Main, NextScript } from 'next/document'

export default function Document() {
  return (
    <Html>
      <Head>
        <link rel="stylesheet" href="..." />
      </Head>
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  )
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM