Next.js 中如何使用 Styled Components?

阅读时长 9 分钟读完

在前端开发中,我们经常需要使用 CSS 来样式化网页,而 Styled Components 是一款流行的 CSS-in-JS 库,它可以帮助我们在 React 中更方便地管理和使用样式。在本文中,我们将探讨如何在 Next.js 中使用 Styled Components,具体内容包括安装和配置 Styled Components,以及如何将 Styled Components 与 Next.js 的服务器端渲染(SSR)相结合。

安装和配置 Styled Components

首先,我们需要安装 Styled Components。在终端中运行以下命令:

或者

完成安装后,在 Next.js 中使用 Styled Components 很简单。我们只需在 _app.js 文件中导入 createGlobalStyleThemeProvider,并将这两个组件包裹在 Next.js 提供的 App 组件中即可。示例代码如下所示:

-- -------------------- ---- -------
-- -------------

------ ----- ---- --------
------ - ------------------ ------------- - ---- --------------------

----- ----------- - ------------------
  ---- -
    ----------------- --------
    ------- --
    -------- --
  -
--

----- ----- - -
  ------- -
    -------- ----------
  --
--

-------- ------- ---------- --------- -- -
  ------ -
    --
      ------------ --
      -------------- --------------
        ---------- -------------- --
      ----------------
    ---
  --
-

------ ------- ------

在上面的示例代码中,我们定义了一个 GlobalStyle 组件,用来设置全局的样式。我们还定义了一个 theme,其中包含了一些颜色值,用来作为主题色调。

使用 Styled Components

一旦我们完成了配置,使用 Styled Components 就与在普通的 React 项目中一样简单了。我们可以创建一个 Styled Components 组件,并在其中使用 CSS 样式。示例代码如下所示:

-- -------------------- ---- -------
------ ------ ---- --------------------

----- ------ - --------------
  ----------------- ---- ----- -- -- ----------------------
  ------ -----
  ---------- -----
  -------- ------ -----
  ------- -----
  -------------- --------
  ------- --------

  ------- -
    ----------------- --------
  -
--

-------- ---------- -
  ------ -
    --
      ----------- -- -------------
      ------------- ------------
    ---
  --
-

------ ------- ---------

在上面的示例代码中,我们创建了一个 Button 组件,并向其中添加了 CSS 样式。我们使用了 theme 对象中的 colors.primary 属性,作为按钮的背景颜色。

与服务器端渲染(SSR)相结合

在 Next.js 中使用 SSR,意味着我们需要在服务器端和客户端都使用相同的 CSS 样式。如果我们只使用普通的 CSS,可以在 _document.js 文件中进行配置。但是使用 Styled Components,我们需要进行一些其他的步骤。

Next.js 提供了 ServerStyleSheetStyleSheetManager,用于在服务器端渲染中使用 Styled Components。我们需要在 getInitialProps 函数中创建一个 ServerStyleSheet 实例,并将其与 styled-components 相关的组件包裹在 StyleSheetManager 中。示例代码如下所示:

-- -------------------- ---- -------
-- --------------

------ ----- ---- --------
------ ------- - ---------------- - ---- --------------------

----- ------ - --------------
  ----------------- ---- ----- -- -- ----------------------
  ------ -----
  ---------- -----
  -------- ------ -----
  ------- -----
  -------------- --------
  ------- --------

  ------- -
    ----------------- --------
  -
--

-------- ---------- -
  ------ -
    --
      ----------- -- -------------
      ------------- ------------
    ---
  --
-

------------------------ - ----- --------- -- -
  ----- ----- - --- -------------------
  ----- ------------------ - -------------------

  --- -
    ------------------ - -- --
      --------------------
        ----------- ----- -- ------- --
          --------------------
            ---- ---------- --
          --
      ---

    ----- ------------ - ----- -----------------------------

    ------ -
      ----------------
      ------- -
        --
          ---------------------
          -------------------------
        ---
      --
    --
  - ------- -
    -------------
  -
--

------ ------- ---------

在上面的示例代码中,我们使用了 ServerStyleSheetStyleSheetManager 来在服务器端渲染中使用 Styled Components。在 getInitialProps 函数中,我们将 App 组件包裹在 sheet.collectStyles 中,并将样式添加到 initialProps.styles 中。

_document.js 文件中,我们需要导入 ServerStyleSheet 并创建一个新的 ServerStyleSheet 实例。我们还要将 styled-components 相关的组件包裹在 StyleSheetManager 中,并利用 sheet.getStyleElement() 将样式输出到 HTML 中。示例代码如下所示:

-- -------------------- ---- -------
-- ------------------

------ --------- - ----- ----- ----- ---------- - ---- ----------------
------ - ---------------- - ---- --------------------

----- ---------- ------- -------- -
  ------ ----- -------------------- -
    ----- ----- - --- -------------------
    ----- ------------------ - ---------------

    --- -
      -------------- - -- --
        --------------------
          ----------- ----- -- ------- --
            --------------------
              ---- ---------- --
            --
        ---

      ----- ------------ - ----- ------------------------------

      ------ -
        ----------------
        ------- -
          --
            ---------------------
            -------------------------
          ---
        --
      --
    - ------- -
      -------------
    -
  -

  -------- -
    ------ -
      ------
        ----- --
        ------
          ----- --
          ----------- --
        -------
      -------
    --
  -
-

------ ------- -----------

在上面的示例代码中,我们使用了 ServerStyleSheetStyleSheetManager 来在服务器端渲染中使用 Styled Components。在 getInitialProps 函数中,我们将 App 组件包裹在 sheet.collectStyles 中,并将样式添加到 initialProps.styles 中。在 _document.js 文件中,我们利用 sheet.getStyleElement() 将样式输出到 HTML 中。

总结

在本文中,我们探讨了如何在 Next.js 中使用 Styled Components。我们首先讨论了如何安装和配置 Styled Components,然后讲解了如何使用 Styled Components 和服务器端渲染相结合。最后,我们以示例代码的形式呈现了我们的解决方案。

使用 Styled Components 可以帮助我们更加方便地管理和使用 CSS 样式,尤其是在 Next.js 项目中,可以更好地管理服务器端渲染。如果你还没有尝试过 Styled Components,不妨在你的下一个项目中试试这个强大的 CSS-in-JS 库吧!

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64cb37f05ad90b6d041f4b53

纠错
反馈