我已经完成了我的第一个 Gatsby 应用程序,它将很快投入生产。这是链接:https ://majiid-landing-page.vercel.app/
我在整个应用程序中都使用了样式化组件,我通常采用SCSS
withBEM
方法,但我想尝试这种CSS in JS
方法。
问题是页面首先在几分之一秒内出现无样式,然后样式被解析,就像那些被注入的一样JS
,而样式实际上是在盖茨比使用的 HTML 中SSR
。
这是正常的行为吗?
我不确定如何重现整个内容,因为无论如何我正在使用的 repoGlobalStyles
以及每个组件中的特定样式都是私有的。
以下是一些片段:
全局样式
import React from "react";
import Abstracts from "./abstracts/abstracts";
import Base from "./base/base";
import Utils from "./utils/utils";
const GlobalStyles = () => {
return (
<>
<Abstracts />
<Base />
<Utils />
</>
);
};
export default GlobalStyles;
全局样式创建示例:
import { createGlobalStyle } from "styled-components";
export default createGlobalStyle`
:root {
// COLORS
--body-background: #ffffff;
}
`;
盖茨比 SSR
// gatsby-ssr.js
const React = require("react");
require("./src/scss/index.scss");
const GlobalStyles = require("./src/styles/global-styles").default;
const Layout = require("./src/layout/Layout").default;
exports.wrapRootElement = ({ element }) => {
return (
<>
<GlobalStyles />
<Layout>{element}</Layout>
</>
);
};
盖茨比浏览器.js
const React = require("react");
require("./src/scss/index.scss");
const GlobalStyles = require("./src/styles/global-styles").default;
const Layout = require("./src/layout/Layout").default;
exports.wrapRootElement = ({ element }) => {
console.log("Running this");
return (
<>
<GlobalStyles />
<Layout>{element}</Layout>
</>
);
};
盖茨比配置(摘录):
plugins: [
"gatsby-plugin-styled-components",
...
package.json 依赖项
"dependencies": {
"@vimeo/player": "^2.16.0",
"babel-plugin-styled-components": "^1.13.2",
"bootstrap": "^5.1.0",
"gatsby": "^3.11.1",
"gatsby-plugin-image": "^1.11.0",
"gatsby-plugin-react-helmet": "^4.11.0",
"gatsby-plugin-sass": "^4.11.0",
"gatsby-plugin-sharp": "^3.11.0",
"gatsby-plugin-sitemap": "^4.7.0",
"gatsby-plugin-styled-components": "^4.11.0",
"gatsby-plugin-webfonts": "^2.1.1",
"gatsby-source-contentful": "^5.11.1",
"gatsby-source-filesystem": "^3.11.0",
"gatsby-transformer-sharp": "^3.11.0",
"node-sass": "^6.0.1",
"normalize.css": "^8.0.1",
"polished": "^4.1.3",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-helmet": "^6.1.0",
"react-icons": "^4.2.0",
"react-responsive": "^9.0.0-beta.3",
"styled-components": "^5.3.0"
}