next.js - 如何使用 next.js 中的 npm 类名库来选择性地应用 css 文件中的样式?
问题描述
在下面的 html 中,我可以根据 message.error 或 message.info 选择应用引导类、alert-danger 或 alert-primary。目标类是引导类,它按预期工作。
<div
className={classnames(`alert, ${styles.alertDiv}`, {
"alert-danger": message.error,
"alert-primary": message.info,
})}
>
现在,如果 message.error 为真,我想应用 css 文件中的样式 $(styles.activeDiv) 来代替 alert-danger。换句话说,我想用 $(styles.activeDiv) 替换 alert-danger。我该怎么做呢。
解决方案
在 Next.js 和 Bootstrap 中,您可以覆盖默认的 CSS 样式或编写特定的组件级样式Next.js 内置 CSS 支持。有很多方法可以实现这一点,您可以将样式对象作为内联样式属性传入。我认为一个简单的方法就是useState
挂钩。这个在两个不同的 CSS 类之间切换,但您可以根据需要进行更改:
在此示例中,当您单击 div 时,className 会发生变化
import { useState } from "react";
export default function IndexPage() {
const [dynamicClassName, setDynamicClassName] = useState("info");
const handleClassChange = () => {
console.log("changing div class name");
dynamicClassName === "info"
? setDynamicClassName("alert")
: setDynamicClassName("info");
};
return (
<>
<div className={dynamicClassName} onClick={handleClassChange}>
This div has a dynamic CSS class based on click
</div>
<style jsx>
{`
.alert {
color: red;
border: 5px solid red;
}
.info {
color: green;
border: 5px solid green;
}
`}
</style>
</>
);
}
注意:针对更具体的工作示例进行了编辑
推荐阅读
- html - 如何将颜色框添加到 SELECT 或 CHECKBOX?
- javascript - 保存后 Webpack 5 构建重复执行两次
- python - Jupyter Notebook(Ubuntu 20.04.02 LTS)“500:内部服务器错误”
- c++ - C++ 合并排序计数比较
- javascript - 在不需要时将函数编写为异步函数是否有好处?
- nearprotocol - 出现“无法为帐户签署交易”错误
- sql-server - 有什么方法可以根据环境更改 Python 代码中的 SQL Server 名称吗?
- excel - 根据 PowerQuery 中的一列更改表的结构
- reactjs - 我遇到了这个问题,我需要帮助“this.state.pages.filter 不是函数”
- xml - 内部错误没有空结构codegen maven jibx插件的包装名称?