Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 网页包块样式和react.lazy_Css_Reactjs_Webpack - Fatal编程技术网

Css 网页包块样式和react.lazy

Css 网页包块样式和react.lazy,css,reactjs,webpack,Css,Reactjs,Webpack,我面临的问题与风格的顺序有关。 在我的例子中,我有一个应用程序,我正在使用React.lazy,它将把我们的应用程序(JS和CSS)分成小块(以提高初始加载性能)。当我们访问第一个页面时,问题出现了(因此我们将获取与该页面相关的JS+CSS),然后我们将转到另一个页面(也将JS+CSS获取到相关页面)。在第二页上,我们覆盖了一些样式,我们在第一页上使用了这些样式。然后我们将返回到第一个页面(我们不会将CSS和JS重新获取到相关页面,因为我们在缓存中有它),问题就来了,因为覆盖样式会使第一个页面崩

我面临的问题与风格的顺序有关。
在我的例子中,我有一个应用程序,我正在使用React.lazy,它将把我们的应用程序(JS和CSS)分成小块(以提高初始加载性能)。当我们访问第一个页面时,问题出现了(因此我们将获取与该页面相关的JS+CSS),然后我们将转到另一个页面(也将JS+CSS获取到相关页面)。在第二页上,我们覆盖了一些样式,我们在第一页上使用了这些样式。然后我们将返回到第一个页面(我们不会将CSS和JS重新获取到相关页面,因为我们在缓存中有它),问题就来了,因为覆盖样式会使第一个页面崩溃。有没有办法解决这个问题?如果第二页的样式不会直接覆盖组件的CSS类,那么问题就不会出现:(

使用样式加载器,您可以将一些CSS文件标记为惰性,并在装载路由时调用
。use()
,在卸载路由时调用
。unuse()

import styles from './styles.lazy.css';

export function LegacyRoute() {
  useLayoutEffect(() => {
    styles.use();
    return () => { styles.unuse() };
  }, []);
  return <p>Hello World</p>;
}
资料来源:

CSS选择器层次结构就是这样。您唯一能做的就是使用不同的类名来避免覆盖。我知道,但不幸的是,有太多的地方无法用这种方式修复它:(
module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/i,
        exclude: /\.lazy\.css$/i,
        use: ['style-loader', 'css-loader'],
      },
      {
        test: /\.lazy\.css$/i,
        use: [
          { loader: 'style-loader', options: { injectType: 'lazyStyleTag' } },
          'css-loader',
        ],
      },
    ],
  },
};