我如何分享 jss 样式以响应 material UI

How do I share jss styles in react with material UI

我有几个 .js 文件使用 { makeStyles } from "@material-ui/core/styles"; 生成 jss。我使用 className={classes.myClass},最后我用 const classes = useStyles(); 调用它 这是一个众所周知的设置。问题是我在我所有的反应组件中使用相同的 jss 代码。它非常可重复且耗时,因为开发时需要在每个文件中更改 jss 代码。

我试图用所有 jss 代码制作一个单独的文件,然后导出和导入它,但后来我遇到了 className={classes.myClass} 返回 classes 不存在或未声明的问题,这是真的,因为 const classes = useStyles() 现在在另一个文件中。

代码示例:

component1.js

{....}

const useStyles = makeStyles ({
  myfontStyle: {
    color: "red"
  },
});

export default function Component1() {

  const classes = useStyles();

  return (

    <div className={classes.myfontStyle}>
      Helo world 
    </div>
  )
};

component2.js

{....}

const useStyles = makeStyles ({
  myfontStyle: {
    color: "red"
  },
});

export default function Component2() {

  const classes = useStyles();

  return (

    <div className={classes.myfontStyle}>
      Helo world 
    </div>
  )
};

如我们所见,这两个组件共享相同的 jss,但我仍然需要重复两次。

那么我该如何正确的解决这个问题呢? 谢谢大家的回答。

您至少需要在每个要使用 useStyles 反应挂钩的组件中使用 classes = useStyles()。没有什么可以阻止您在它自己的文件中定义自定义挂钩,并且将其导入到您要在其中使用样式的组件中。

export const useMyFontStyles = makeStyles ({
  myfontStyle: {
    color: "red"
  },
});

在组件中:

import { useMyFontStyles } from '../path/to/useMyFontStyles';

export default function Component2() {
  const classes = useMyFontStyles();

  return (
    <div className={classes.myfontStyle}>
      Helo world 
    </div>
  )
};