react中classNames的作用是什么?
我在一个代码中有看到使用 classNames("codicon")
创建一个icon:
<ul className={styles.actionsContainer}>
<li>
<a
className={classNames(
"codicon",
showPrimarySideBar
? "codicon-layout-sidebar-left"
: "codicon-layout-sidebar-left-off",
styles.actionLabel
)}
请问下:
classNames
在这里的作用是什么呢?不用它的话,是否可以直接:className = "xxx"
?那么使用 classNames
的好处是什么?
回复
1个回答

test
2024-06-28
https://github.com/JedWatson/classnames/blob/main/index.js
这大概就是所有的代码了吧?
// 如果是数字和字符串类型就 push
if (argType === 'string' || argType === 'number') {
classes.push(arg);
}
// 如果是数组就递归
if (Array.isArray(arg)) {
if (arg.length) {
var inner = classNames.apply(null, arg);
if (inner) {
classes.push(inner);
}
}
}
// 如果是对象,就看看能 toString 不,不能的话就遍历(for in),等于把为 true 的 key push 了
if (argType === 'object') {
if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {
classes.push(arg.toString());
continue;
}
for (var key in arg) {
if (hasOwn.call(arg, key) && arg[key]) {
classes.push(key);
}
}
}
完整的来看,和 vue 的 :class 支持的差不多吧
[
'abc',
['abcd','abcde'],
{'is-active': true}
['a1',['a2'],{'is-hover': false}],
]
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容