Next.js 中使用 styled-components

阅读时长 8 分钟读完

引言

在前端开发中,样式的管理是非常重要的一环。styled-components 库是一个实现了 CSS-in-JS 的库,它通过暴露出一个嵌套在组件内的模板字面量标签(tagged template literals)来定义 CSS,并且自动适配主题(theme)变量。它的优点有:

  • 支持 SSR(Server Side Rendering)。
  • 自动适配主题变量。
  • 支持嵌套选择器。
  • 无需编写 class 名称,减少了命名类的烦恼。

同时,Next.js 是一个 React 的合理默认配置的服务器端渲染框架,它结合了 React、Webpack、Node.js 等技术,可以让我们快速搭建起前端工程。它的优点有:

  • 自动代码分割,对页面加载速度优化有很大帮助。
  • 自带服务器渲染支持,支持 SEO(Search Engine Optimization,即搜索引擎优化)。
  • 支持静态页面导出,可部署到任何地方。

在本文中,我们将介绍如何在 Next.js 项目中,使用 styled-components 库实现样式的管理。

步骤

第一步:安装 styled-components

在终端里输入以下命令:

第二步:创建一个样式组件

我们可以创建一个 styled 组件,然后在 jsx 中使用它:

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

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

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

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

styled-components 通过将样式的逻辑嵌入组件内部,使得我们能够更方便的进行样式管理。

在上述代码中,Title 是一个样式组件,它接收了一个 template literal 字符串,我们将 CSS 样式写在这个字符串里,样式组件内部的样式将作用于

元素上。

注意到这个 Title 组件接收的是一个 props ,${props => props.theme.primaryColor} 是一个动态的 css 变量。 在我们的应用中,可以定义多种不同的主题,用于不同场景下的界面展示,实现方案代码如下:

第三步:创建主题

可以在应用中定义一个主题,然后通过样式组件进行样式的适配,相关代码如下:

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

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

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

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

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

这样,我们就实现了在应用中定义主题,然后通过样式组件进行样式的主题适配。

第四步:在服务器端使用样式组件

Next.js 支持服务器端渲染,为了在服务器端渲染样式组件,我们需要注意以下几点:

  1. import styled-components/dist/ssr-prepass.js 用于服务器端渲染。
  2. createGlobalStyle 用于为全局定义样式。
  3. App 对象需要嵌套在一个 ThemeProvider 组件内,以在整个应用中共享主题。

相关代码如下:

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

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

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

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

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

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

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

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

第五步:打包输出

在 Next.js 的默认配置中,页面都放在 pages 文件夹下,文件名即为页面的路由。在 pages 文件夹下,只需要创建一个 xxx.js 文件,就可以自动生成路由了。

我们可以再 pages 文件夹下创建一个 pages/index.js 文件,并利用上文中的示例代码,实现主题样式适配,页面呈现代码如下:

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

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

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

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

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

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

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

在终端里输入以下命令,打包输出文件:

执行完命令后,打开项目下的 .next 文件夹,可以看到一个名为 main.js 的文件,它就是我们打包输出的文件。

总结

本文介绍了在 Next.js 项目中使用 styled-components 库进行样式管理的方案,并且实现了样式的适配,包括了如何在服务器端渲染使用 styled-components、如何定义主题等。

整个方案代码实现上,比较简单,只需要注意到样式的嵌套、主题的定义以及在服务器端使用 styled-components,就可以轻松实现项目样式的管理。

通过这篇文章的学习,读者可以更好地管理页面样式,并更好地掌握 Next.js 服务器端渲染框架以及 styled-components 库的使用。

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

纠错
反馈