【问题标题】:Is there a way to style an element in React using the ID without using className?有没有办法在不使用 className 的情况下使用 ID 在 React 中设置元素的样式?
【发布时间】:2020-12-11 07:30:04
【问题描述】:

我正在将一个旧网站转换为 React,并且不想更改之前编码的所有 CSS 文件。许多元素当前通过使用 id 设置其样式。有没有办法让className={styles["#topBar"]} 正确设置样式,而无需删除# 并将其替换为CSS 文件夹中的.

【问题讨论】:

  • 谢谢,但我不想更改#。我只是希望能够将 CSS 与 className 一起使用
  • id 和类具有不同的特性,因此可能不推荐使用任一选项,并且很可能不会按预期呈现。 MDN Web Docs: Specificity
  • 我想了很多,但希望有办法。 React 中有没有一种方法可以使用 ID 来设置元素的样式而不使用 className?尽量避免重命名一堆旧属性
  • 是的,只需在标准元素中正常使用它,当将其作为道具传递时,只需将其声明为该道具名称。 return (<div id="myID">) 或从道具传递 <MyComponent id="compId" /> ... MyComponent = ({id}) => {... return (<div id={id}>)}。文档:All Supported HTML Attributes

标签: css reactjs lamp


【解决方案1】:

由于您使用的是 CSS 模块,因此您需要稍微不同地访问样式。您需要import styles from 'Component.module.css';,然后通过引用此导入的对象styles.MyClass 或在您的情况下声明您的样式,因为您有连字符,您需要使用括号表示法styles["top-bar"]

这是一个有效的sandbox

//MyComponent.js

import styles from "./MyComponent.module.css";

export default function MyComponent() {
  return (
    <div id={styles["top-bar"]}>
      <h2>My Component</h2>
      <InnerComponent id="inner" />
    </div>
  );
}

function InnerComponent({ id }) {
  return (
    <div id={styles[id]}>
      <h3>Inner Component</h3>
      <p id={styles.para}>Styled Paragraph</p>
    </div>
  );
}
//MyComponent.module.css

#top-bar {
  width: 90vw;
  margin: 1rem auto;
  padding: 1rem;
  text-align: center;
  background-color: LightPink;
}

#inner {
  background-color: LightBlue;
  text-align: left;
}

#para {
  color: red;
}

这是一个快速的 sn-p,显示它使用 ID。

function MyComponent() {
  return (
    <div id="top-bar">
      <h2>My Component</h2>
      <InnerComponent id="inner" />
    </div>
  )
}

function InnerComponent({id}) {
  return (
    <div id={id}>
      <h3>Inner Component</h3>
    </div>
  )
}

ReactDOM.render(<MyComponent />, document.getElementById('App'));
#top-bar {
  width: 90vw;
  margin: 1rem auto;
  padding: 1rem;
  text-align:center;
  background-color: LightPink;
}

#inner {
  background-color: LightBlue;
  text-align: left;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>


<div id="App"></div>

【讨论】:

  • 这就是我所拥有的。你认为它与名为 HeaderToolbar.module.css 的文件无关吗?
  • HeaderToolbar.module.css 是一个仅适用于 HeaderToolbar.js 的范围文件,因此只要 #top-bar {...} 在该文件中并且您已在 HeaderToolbar.js 中应用它,它就应该正在申请。
  • 您是否已将样式表导入到 .js 文件中?
  • 我已经编辑了我的答案以包括使用 CSS 模块。
  • 做到了。早该想到的。太感谢了。通过 CSS 和更改所有内容为我节省了大量工作
猜你喜欢
  • 2016-11-26
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多