如何有条件地渲染我的 CSS 类的一部分

Posted

技术标签:

【中文标题】如何有条件地渲染我的 CSS 类的一部分【英文标题】:How do I conditionally render part of my CSS class 【发布时间】:2021-12-28 13:43:01 【问题描述】:

当变量(数据)不为空时,如何使以下悬停伪类中的所有 css 有条件地呈现?我的 React 组件中有以下样式(使用 Material UI makeStyles:

const useStyles = makeStyles(theme => (
      card: 
        height: '100%',
        '&:hover': 
          background: theme.palette.secondary.light,
          cursor: 'pointer',
          '& $hide': 
            opacity: 1,
            transition: '0.6s',
          ,
        ,
      ,
));

const myComponent = (data) => 
     const classes=useStyles(data);
     <div className=classes.card>
          Hello
     </div>

我已经尝试使用以下几行的内容,但是所有的反引号和撇号根本不起作用!:

  card: 
    height: '100%',
    position: 'relative',
    ( data) => (data && `'&:hover': 
      background: $theme.palette.secondary.light,
      cursor: 'pointer', 
      '& $hide': 
        opacity: 1,
        transition: '0.6s',
      ,
    ,`),
  ,

非常感谢,

凯蒂

【问题讨论】:

虽然我并不完全熟悉这种语法,但在我看来,最简单的解决方案是有条件地附加该类。可能是className=data ? classes.card : null 之类的? 谢谢 Pixell!这是一个可爱、简单的解决方案。我将这个类分成两个类(一个悬停信息,另一个悬停信息),然后按如下方式应用该类: $classes.card $dataType && classes.cardWithLink > 它工作得很好。太感谢了! :) 【参考方案1】:

尝试使用classnames 包

import cx from 'classnames';

const useStyles = makeStyles(theme => (
      cardWithData: 
        height: '100%',
        '&:hover': 
          background: theme.palette.secondary.light,
          cursor: 'pointer',
          '& $hide': 
            opacity: 1,
            transition: '0.6s',
          ,
        ,
      ,
     card: 
       height: '100%',
     
));

const myComponent = (data) => 
     const classes=useStyles();
     <div className=cx([classes.cardWithData]: Boolean(data), [classes.card]:!data)>
          Hello
     </div>


【讨论】:

以上是关于如何有条件地渲染我的 CSS 类的一部分的主要内容,如果未能解决你的问题,请参考以下文章

有条件地渲染 JSF 组件以进行打印

ASP.NET MVC - 在布局中有条件地渲染部分

我怎样才能更好地有条件地渲染我的组件?

如何通过 map 函数有条件地使用 React 和 Firebase 渲染元素?

如何根据 prop 有条件地渲染组件的颜色?

如何使用 ReactiveBase 有条件地呈现搜索结果