【发布时间】:2020-03-31 07:49:15
【问题描述】:
我想根据通过组件传递的道具动态导入 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 模块
我将如何以及在哪里这样做?它应该在组件内部,但如果我使用Effect,我将如何引用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)
})
}
});
我没有收到任何错误,但没有应用样式
【问题讨论】:
-
您是否真的要动态加载 css 文件,即使这会影响性能和用户体验?想象一下,您的用户通过单击按钮必须等到所有 css 文件加载并应用(阅读主题“关键渲染路径”)。
-
但是你可以同时导入,然后按条件使用。是的,它增加了首次加载,但不影响用户使用站点时的加载。
标签: reactjs css-modules dynamic-import