当前位置: 首页 > 知识库问答 >
问题:

如何使用嵌套的类名?[副本]

柴修筠
2023-03-14

我正在使用React和Material ui并创建一个进度条。

我创建了以下类:

const useStyles = makeStyles({
  progressSegment: {
    display: "flex",
  },
  item: {
    width: "100%",
    backgroundColor: "lightgray",
    marginRight: 2,
    height: 8,

    "&:first-child": {
      borderTopLeftRadius: 3,
      borderBottomLeftRadius: 3,
    },

    "&:last-child": {
      borderTopRightRadius: 3,
      borderBottomRightRadius: 3,
    },

    "&.red-common": {
      background: "#D1132A",
    },

    "&.gold-common": {
      background: "#EBA75C",
    },

    "&.orange-common": {
      background: "#E4590F",
    },

    "&.yellow-common": {
      background: "#FFCD0F",
    },

    "&.yellow-light-common": {
      background: "#EACB16",
    },

    "&.green-light-common": {
      background: "#C1C625",
    },

    "&.green-common": {
      background: "#2CAC87",
    },
  },
});

然后在我的组件中,我创建了一些div来呈现进度条。这就是我想要实现的目标:

这是我的组件:

export const SegmentedProgressBar = () => {
  const classes = useStyles();
  return (
    <div className={classes.progressSegment}>
      <div className={classes.item} />
      <div className={classes.item} />
      <div className={classes.item} />
      <div className={classes.item} />
      <div className={classes.item} />
      <div className={classes.item} />
      <div className={classes.item} />
    </div>
  );
};

问题是如何将这些类传递给我的第一个嵌套div:className=“item red common”,然后依次传递给下一个嵌套的div

我想我可以使用clsx库,但是我不确定如何使用。

提前谢谢!

编辑:对于寻找此解决方案的任何人,以下是我如何使用条件实现此解决方案:

import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import PropTypes from "prop-types";

const useStyles = makeStyles({
  progressSegment: {
    display: "flex",
  },
  item: {
    width: "100%",
    backgroundColor: "lightgray",
    marginRight: 2,
    height: 8,

    "&:first-child": {
      borderTopLeftRadius: 3,
      borderBottomLeftRadius: 3,
    },

    "&:last-child": {
      borderTopRightRadius: 3,
      borderBottomRightRadius: 3,
    },

    "&.red-common": {
      background: "#D1132A",
    },

    "&.gold-common": {
      background: "#EBA75C",
    },

    "&.yellow-common": {
      background: "#FFCD0F",
    },

    "&.yellow-light-common": {
      background: "#EACB16",
    },

    "&.green-common": {
      background: "#2CAC87",
    },
  },
});

export const SegmentedProgressBar = ({ level = 0 }) => {
  const classes = useStyles();

  return (
    <div className={classes.progressSegment}>
      <div className={`${classes.item} ${level >= 1 && "red-common"}`} />
      <div className={`${classes.item} ${level >= 2 && "gold-common"}`} />
      <div className={`${classes.item} ${level >= 3 && "yellow-common"}`} />
      <div
        className={`${classes.item} ${level >= 4 && "yellow-light-common"}`}
      />
      <div className={`${classes.item} ${level >= 5 && "green-common"}`} />
    </div>
  );
};

SegmentedProgressBar.propTypes = {
  level: PropTypes.number,
};

共有2个答案

吕英豪
2023-03-14

你可以这样做

<div className={`${classes.item} ${classes.other-class}`}>

或者像你说的那样使用clsx。

https://nikitahl.com/how-to-assign-multiple-classes-in-react/

或者类似的事情:

<div className={[class1, class2, class3].join(' ')} />
窦华晖
2023-03-14

我想你需要这样的东西

export const SegmentedProgressBar = () => {
  const classes = useStyles();
  return (
    <div className={classes.progressSegment}>
      <div className={`${classes.item} red-common`} />
      <div className={`${classes.item} gold-common`} />
      <div className={`${classes.item} orange-common`} />
      <div className={`${classes.item} yellow-common`} />
      <div className={`${classes.item} yellow-light-common`} />
      <div className={`${classes.item} green-light-common`} />
      <div className={`${classes.item} green-common`} />
    </div>
  );
};
 类似资料:
  • 我有一个这样的目标字符串:(然而嵌套在实践中可能非常深) 预期结果将是: 小组: 我在c#regex中找不到任何东西可以这样做嵌套捕获。有可能吗? 编辑: 我想我把我的例子简化得太多了,这使答案模糊不清。我需要以递归的方式捕获,因为我需要括号内的内容: 预期结果将是: 和

  • 主要内容:Java11 嵌套类的示例,输出结果为Java 11 引入了嵌套类的概念,我们可以在类中声明一个类。这种类的嵌套允许在一个地方对要使用的类进行逻辑分组,使它们更具可读性和可维护性。嵌套类可以有四种类型 - 静态嵌套类 非静态嵌套类 本地类 匿名类 Java 11 还提供了嵌套的概念,以允许嵌套类的通信和验证。 Java11 嵌套类的示例 ApiTester.java 输出结果为  

  • 问题内容: 我如何指示JAXB处理此问题? XML格式 根java 这不起作用… allChildren为空。 问题答案: 您可以更改模型并执行以下操作: 根 父母 更新 有可能避免上课吗? 有两种不同的方法可以完成此操作: 选项#1-使用XmlAdapter的任何JAXB实现 您可以使用XmlAdapter虚拟添加类。 子适配器 根 该注释被用于引用。 儿童 选项#2-使用EclipseLink

  • 我有以下java代码: 我的问题如下:我收到一个文本和一种语言,我必须检查该文本是否仅使用该语言的有效字母字符书写。我的代码如下: 这很好,也很有效,但随着我在应用程序中添加语言,我将不得不在交换机中添加越来越多的案例。 我想知道在中是否有一种方法可以动态命名一个静态嵌套类,比如: 所以我上面的代码可能是这样的: 谢谢,如果这是超级简单的事情,我很抱歉。 我是一名开发人员,正在学习。

  • 目标 了解如何定义嵌套类和何时适合使用它们 了解使用嵌套类的副作用 了解 new 运算符在嵌套类中的特殊用法 了解如何和何时使用静态内部类和匿名内部类 在何处使用嵌套类 顾名思义,嵌套类(或内部类) 是在一个类中定义的另一个类。 public class EnclosingClass { . . . public class NestedClass { . . . } } 像成

  • 当我试图使用ModelMapper将嵌套的java对象转换为嵌套的DTO时,我遇到了一个问题。在父DTO对象中,子DTO为null。以下是代码片段。 实体类: DTO的课程: 这是映射器代码: 输出: 输出用户DTO:UserDTO[名称=xyz,地址=null,产品=null] 在这里,我想将用户实体转换为UserDTO-dto。我得到了地址和产品DTO的空值。我在这里到底缺少什么?有人知道吗?