使用 makeStyles 在另一个选定类中嵌套类

Ala*_*med 6 css reactjs material-design material-ui jss

我需要知道在选择 root 时如何定位“元素”

这是 makeStyles:

const useStyles = makeStyles(theme => ({
   root:{
      '&.selected': {
      }
   },
   element: {
   }
})
Run Code Online (Sandbox Code Playgroud)

这是 jsx

<div className={`${classes.root} ${elementSelected ? 'selected : ''}`}>
  <div className={classes.element}>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

Chr*_*hen 11

您可以使用https://www.npmjs.com/package/classnames来实现这一点。

const useStyles = makeStyles(theme => ({
   root:{
      '&.selected $element': {
      }
   }
})
Run Code Online (Sandbox Code Playgroud)

还有你的 JSX

import classNames from 'classnames';

...

<div className={classNames(classes.root, elementSelected ? 'selected : '')}>
  <div className={classes.element}>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)


Roy*_*L.T 5

这个答案是@Chris 答案的替代方案。

您不需要在项目中包含另一个包,因为您可以使用Material-UI 中的“clsx”。就是这样:

const useStyles = makeStyles(theme => ({
    root:{
        '&.selected $element': {
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

安装 clsx 包时,它会附带 Material-UI。

import clsx from 'clsx';
const classes = useStyles(props);

...

<div className={clsx(classes.root, {
        [classes.selected]: elementSelected
    })}
>
    <div className={classes.element}>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)