gpt4 book ai didi

css - 在 React [FOUC] 中等待 CSS 在 JS 之前加载

转载 作者:技术小花猫 更新时间:2023-10-29 10:33:51 25 4
gpt4 key购买 nike

我们正在完全使用 React 构建我们的新网站,并利用代码拆分和 scss。每当请求新页面时,它首先在浏览器中加载原始 HTML,然后在一瞬间左右加载 css 样式,这似乎是一个 FOUC 问题。这会带来糟糕的体验,我们需要弄清楚如何确保在渲染组件之前加载 CSS。有人对这个有经验么?目前在线上似乎缺少有关此问题的信息。我们目前有 10 个 js block ,但只有一个 main.XXXXXXX.css。

最佳答案

如果你只有一个 main.XXXXXXX.css 文件,那么你应该手动将它注入(inject)到 <head> 中。初始 html View 的一部分,并在同一 html View 的底部加载您的应用程序的入口(也称为初始 JS 文件或某些 webpack list JS 文件)。

例如

<html>
<head>
...some header stuff
<link type="text/css" rel="stylesheet" href="/path/to/main.XXXXXXX.css">
</head>
<body>
<div id="react-app"></div>
<script src="/path/to/vendor.js"></script>
<script src="/path/to/app_entry_or_webpack_manifest.js"></script>
<body>
</html>

我假设您有一台服务器至少提供一个与上述类似的页面。在这种情况下(上图),您的 CSS 将在您的 JS 之前加载,您应该避免 FOUC 问题。

如果您有许多 css 文件,当您拆分应用程序时动态生成(通过代码拆分),这个问题就会变得更加困难,但听起来您还没有遇到这个问题。

编辑:刚刚意识到您可能不知道如何将动态创建的 css 表注入(inject)到您的入口 html 文件中。如果你使用 mini-css-extract-plugin然后你可以指定它产生的文件名。在此示例中,您可以看到您可以选择是否包含 [hash]。您很可能不想要哈希。

const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const devMode = process.env.NODE_ENV !== 'production'

module.exports = {
plugins: [
new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: devMode ? '[name].css' : '[name].[hash].css',
chunkFilename: devMode ? '[id].css' : '[id].[hash].css',
})
],
module: {
rules: [
{
test: /\.(sa|sc|c)ss$/,
use: [
devMode ? 'style-loader' : MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader',
'sass-loader',
],
}
]
}
}

关于css - 在 React [FOUC] 中等待 CSS 在 JS 之前加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49496572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com