动态导入:导入css模块,具体取决于

用户名

我想根据通过组件的道具动态导入css模块

我的js文件是这样的

import css from './MenuItem.module.styl'
/* .... */
const MenuItem = ({ node, isTitle, isHeader, pathname, hoveredItem }) => {      

  const linkClasses =
    classNames(css.someClass, {[css.someOtherClass]: isHeader})

  const subItemsContainerClasses = classNames(css.someClass, {[css.someOtherClass]: isHeader})

  const itemsContainerClasses = classNames(css.someClass, {[css.someOtherClass]: isHeader})



  return (
    <div className={itemsContainerClasses}>
      /* etc */
    </div>
  )
}

它变得非常混乱,因此我想根据isHeader属性导入不同的CSS模块

我将如何以及在何处这样做?它应该在组件内部,但是如果使用useEffect,我将如何引用该css部分

编辑:

我试过了

useEffect(() => {
    if (isheader) {
      import css from './MenuItemHeader.module.styl'
    } else {
      import css from './MenuItemFooter.module.styl'
    }
  });

但我收到一个错误,即导入语句应以文件开头

我试过了

const [css, setCss] = useState({});

useEffect(() => {
    if (isHeader) {
      import('./MenuItemHeader.module.styl')
        .then((response) => {                    
          setCss(response) 
        })
    } else {    
      import('./MenuItemFooter.module.styl')
        .then((response) => {                    
          setCss(response) 
        })
    }
  });

而且我没有任何错误,但是没有应用样式

马克斯·史达琳

你可以试试这个

import  firstCssModule from './MenuItem.firstModule.styles';
import  secondCssModule from './MenuItem.secondModule.styles';

/* ... */

isHeader ? firstCssModule.someClass secondCssModule.someClass

类名

const firstClasses =
    classNames(firstCssModule.someClass, {[firstCssModule.someOtherClass]: isHeader})

const secondClasses = classNames(secondCssModule.someClass, {[secondCssModule.someOtherClass]: isHeader})

const mixedClasses = classNames(firstCssModule.someClass, {[secondCssModule.someOtherClass]: isHeader})

字典和计算的属性

const styles = {
  first: firstCssModule,
  second: secondCssModule
}

const currentModule = 'first';

styles[currentModule].someClass
styles[currentModule].someOtherClass

使用类名,您可以使用类似的名称,这没关系。

{ [styles[currentModule].someOtherClass]: isHeader }

验证方式

const getStyles = moduleName => {
  if (moduleName in styles) {
    return styles[moduleName];
  } else {
    /* moduleName doesn't exist, do something
(for example, return default or throw an error) */
    return styles.first; // default
  }

/* ... */

getStyles(currentModule).someClass;

classnames 在这种情况下:

{ [getStyles(currentModule).someOtherClass]: isHeader }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python:导入模块麻烦,具体取决于运行模式

来自分类Dev

SASS @导入多个文件,具体取决于屏幕大小

来自分类常见问题

Webpack导入返回未定义,具体取决于导入顺序

来自分类Dev

动态导入模块

来自分类Dev

动态导入python模块

来自分类Dev

动态内容取决于CSS类

来自分类Dev

在Haskell中动态导入模块

来自分类Dev

是否可以动态导入模块?

来自分类Dev

导入动态加载模块的功能

来自分类Dev

如何动态导入Zig模块?

来自分类Dev

在TypeScript中动态导入模块

来自分类Dev

如何动态导入更改模块?

来自分类Dev

无法使用动态导入的模块

来自分类Dev

剔除添加CSS类,具体取决于observableArray中的值

来自分类Dev

我的代码中断的不同部分取决于Javascript导入的位置

来自分类Dev

Python / Dill序列化哈希取决于导入的包?

来自分类Dev

动态组装Python模块,动态导入

来自分类Dev

将 css 模块导入 Webpack

来自分类Dev

React.lazy“无法导入动态导入的模块”

来自分类Dev

从导入的模块中按名称动态导入类:

来自分类Dev

元素的BEM方法是否可能属于不同的外观,具体取决于模块?

来自分类Dev

Python 模块名称相互矛盾,具体取决于您运行代码的位置

来自分类Dev

相同的函数返回不同的值,具体取决于是在控制台中创建还是从模块创建

来自分类Dev

如何使用exec动态导入模块

来自分类Dev

在Ember CLI中动态导入模块

来自分类Dev

动态导入模块会导致ImportError

来自分类Dev

从项目模块动态导入Vue CLI

来自分类Dev

无法调用动态导入的python模块

来自分类Dev

无法导入动态安装的python模块