gpt4 book ai didi

javascript - 更改 React 组件的 CSS 会影响所有其他页面

转载 作者:行者123 更新时间:2023-12-03 23:45:25 26 4
gpt4 key购买 nike

我有一个包含以下文件的 React 组件:

  • src/components/HomePage/index.js
  • src/components/HomePage/style.scss

  • 组件非常简单:
    import React from 'react';
    import './style.scss';

    const HomePage = () => {
    return (
    <div className="homepage">
    <h1>Landing page</h1>
    </div>
    );
    };

    export default HomePage;
    style.scss 内我正在对所有 <h1> 应用样式标签:
    h1 {
    color: #f3f3f3;
    font-family: "Cambria";
    font-weight: normal;
    font-size: 2rem;
    }
    它按预期工作。但是,我现在看到 styles.scss 中的 h1 样式正在应用于我网站上的每个 h1,即使在不使用此组件的页面上也是如此。
    我正在使用 Gatsby,但它本质上是一个 React 应用程序。我的理解是 React 的代码分割功能会处理这个问题,来自 style.scss 的代码只会包含在使用我的组件的任何页面的捆绑包中。
    这就是我问 的原因.我有两个简单的修复:
  • 将所有内容包裹在 style.scss 中在 .homepage包装
  • 使用 CSS 模块并将文件重命名为 style.module.scss .当我看到人们这样做时,他们总是从 './style.module.scss' 导入样式 - 有没有办法让 CSS 模块不分配给这样的对象?

  • 更新 : 在 React 上花了很多时间后回到这个问题,我认为 React 样式的市场存在差距。我认为 CSS 模块在语法上很差,必须手动将所有内容包装在 .home 中。将其本地化的标记是我不想做的手动工作。真的应该有人创建一个自动执行此操作的 React 插件,以便每当我有一个名为 Home.js 的文件时我导入 Home.css所有的 CSS 都自动限制为 Home.js无需我做任何特别的事情。

    最佳答案

    如果要本地化 CSS 规则,则必须切换到 modular stylesheets (对于 sass 样式表同样适用)。
    在您当前的结构中,组件会导入非模块化样式表,并且不会使用唯一标识符本地化更改。因此,添加的规则存在于全局范围内,没有唯一的标识符来本地化它们,以便只有选定的组件才能理解它们。这意味着它们能够轻松覆盖之前建立的同名规则(导入顺序在这里很重要,因为它将决定捆绑器如何附加输出样式表)。
    所以不要在 ./style.scss 中保存与组件相关的规则文件,将其重命名为 ./index.module.scss然后您将在组件中使用它,如下所示:

    import React from 'react';
    import styles from './index.module.scss';

    const HomePage = () => {
    return (
    <div className={style.homepage}>
    <h1 className={style.heading}>Landing page</h1>
    </div>
    );
    };

    export default HomePage;
    你的样式表看起来像:
    .heading {
    color: #f3f3f3;
    font-family: "Cambria";
    font-weight: normal;
    font-size: 2rem;
    }
    免责声明 :
    我已将样式约定从按标签选择元素改为按类选择,因为按标签定位元素被广泛认为是一种不好的做法 [ref] ,但是如果你想维护它,那么你必须为这样的规则提供一个父范围(它已经存在,因为父 <div/> 元素有一个分配的类。
    在这种情况下,实现将如下所示:
    import React from 'react';
    import styles from './index.module.scss';

    const HomePage = () => {
    return (
    <div className={style.homepage}>
    <h1>Landing page</h1>
    </div>
    );
    };

    export default HomePage;
    和风格:
    .homepage {
    h1 {
    color: #f3f3f3;
    font-family: "Cambria";
    font-weight: normal;
    font-size: 2rem;
    }
    }

    关于javascript - 更改 React 组件的 CSS 会影响所有其他页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63093276/

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