你可能不需要 classnames或者clsx

发布时间 2023-08-08 20:34:32作者: 桃之夭夭丶

classnames是一个npm用来连接多个类名的工具包,可以加入逻辑判断从而生成自己需要的类名。例如:

classNames('foo', 'bar'); // => 'foo bar'
classNames('foo', { bar: true }); // => 'foo bar'
classNames({ 'foo-bar': true }); // => 'foo-bar'
classNames({ 'foo-bar': false }); // => ''
classNames({ foo: true }, { bar: true }); // => 'foo bar'
classNames({ foo: true, bar: true }); // => 'foo bar'

但是这样用通常会比较麻烦,如果用es6的模板字符串,其实也可以完成同样的功能。

`foo bar` // => 'foo bar', not that exciting
`foo ${ true ? 'bar': '' }`; // => 'foo bar'
`${true ? 'foo-bar': '' }`; // => 'foo-bar'
`${ false ? 'foo-bar' : ''}` // => ''
`${ true? 'foo': '' } ${ true ? 'bar': '' }`; // => 'foo bar'

对于多个类名还可以通过数组连接:

const componentClassName = [
  'some-base-class',
  someBooleanCondition && 'a-class-in-here',
  someOtherBoolean && 'another-class',
]
  .filter(Boolean)
  .join(' ')

 

后面2种写法可以替换掉大部分使用classnames的情况