引言
在前端开发中,样式的管理是非常重要的一环。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
在终端里输入以下命令:
npm install --save styled-components
或
yarn add styled-components
第二步:创建一个样式组件
我们可以创建一个 styled 组件,然后在 jsx 中使用它:
-- -------------------- ---- ------- ------ ------ ---- -------------------- ----- ----- - ---------- ---------- ----- ----------- ------- ------ ------- -- -------------------------- -- ----- ---- - -- -- - ----- ------------ ------- ---------- ---------- -- -- ------------- ------ -- ------ ------- -----
styled-components 通过将样式的逻辑嵌入组件内部,使得我们能够更方便的进行样式管理。
在上述代码中,Title 是一个样式组件,它接收了一个 template literal 字符串,我们将 CSS 样式写在这个字符串里,样式组件内部的样式将作用于
元素上。
注意到这个 Title 组件接收的是一个 props ,${props => props.theme.primaryColor} 是一个动态的 css 变量。 在我们的应用中,可以定义多种不同的主题,用于不同场景下的界面展示,实现方案代码如下:
const theme = { primaryColor: '#333', secondaryColor: '#23a', }; export default theme;
第三步:创建主题
可以在应用中定义一个主题,然后通过样式组件进行样式的适配,相关代码如下:
-- -------------------- ---- ------- ------ ------ ---- -------------------- ------ ----- ---- ----------------- ----- ----- - ---------- ---------- ----- ----------- ------- ------ ------- -- -------------------------- -- ----- ---- - -- -- - ----- ------------ ------- ---------- ---------- -- -- ------------- ------ -- ---------- - ------ ------ ------- -----
这样,我们就实现了在应用中定义主题,然后通过样式组件进行样式的主题适配。
第四步:在服务器端使用样式组件
Next.js 支持服务器端渲染,为了在服务器端渲染样式组件,我们需要注意以下几点:
- import styled-components/dist/ssr-prepass.js 用于服务器端渲染。
- createGlobalStyle 用于为全局定义样式。
- App 对象需要嵌套在一个 ThemeProvider 组件内,以在整个应用中共享主题。
相关代码如下:
-- -------------------- ---- ------- ------ --- ---- ----------- ------ - -------------- ----------------- - ---- -------------------- ------ - ---------------- - ---- ------------------------------------- ------ ----- ---- ----------------- ----- ----------- - ------------------ ---- - ------- -- -------- -- ----------------- ------- -- ---------------------------- ------------ ----------- - -- ----- ----- ------- --- - ------ ----- ----------------- ---------- --- -- - ----- --------------------- - --- ------------------- ----- ------------------ - --------------- --- - -------------- - -- -- -------------------- ----------- --- -- ----- -- ------------------------------------ -------------- -------------- ---- ---------- -- ---------------- -- --- ----- ------------ - ----- --------------------- ---------- --- --- ------ - ---------------- ------- - -- --------------------- ----------------------------------------- --- -- -- - ------- - ----------------------------- - - -------- - ----- - ---------- --------- - - ----------- ------ - -- ------------ -- -------------- -------------- ---------- -------------- -- ---------------- --- -- - - ------ ------- ------
第五步:打包输出
在 Next.js 的默认配置中,页面都放在 pages 文件夹下,文件名即为页面的路由。在 pages 文件夹下,只需要创建一个 xxx.js 文件,就可以自动生成路由了。
我们可以再 pages 文件夹下创建一个 pages/index.js 文件,并利用上文中的示例代码,实现主题样式适配,页面呈现代码如下:
-- -------------------- ---- ------- ------ ------ ---- -------------------- ----- ----- - ---------- ---------- ----- ----------- ------- ------ ------- -- -------------------------- -- ----- - - --------- ---------- ----- ----------- ----- ------ ------- -- ---------------------------- -- ----- ----- - - ------------- ------- --------------- ------- -- ----- ----- - -- -- - ----- ------------ ------- ---------- ---------- -- -- ------------- ------ -- ----------- - ------ ------ ------- ------
在终端里输入以下命令,打包输出文件:
npm run build
或
yarn build
执行完命令后,打开项目下的 .next 文件夹,可以看到一个名为 main.js 的文件,它就是我们打包输出的文件。
总结
本文介绍了在 Next.js 项目中使用 styled-components 库进行样式管理的方案,并且实现了样式的适配,包括了如何在服务器端渲染使用 styled-components、如何定义主题等。
整个方案代码实现上,比较简单,只需要注意到样式的嵌套、主题的定义以及在服务器端使用 styled-components,就可以轻松实现项目样式的管理。
通过这篇文章的学习,读者可以更好地管理页面样式,并更好地掌握 Next.js 服务器端渲染框架以及 styled-components 库的使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b11a6648841e9894d6ec34