npm:https://www.npmjs.com/package/classnames
github:https://github.com/JedWatson/classnames
在ant-design的源码实现中,就大量使用了这种方式来拼接当前元素的className
例如:
let alertCls = classNames(prefixCls, {[`${prefixCls}-${type}`]: true,[`${prefixCls}-close`]: !this.state.closing,[`${prefixCls}-with-description`]: !!description,[`${prefixCls}-no-icon`]: !showIcon,[`${prefixCls}-banner`]: !!banner,}, className);
使用
import classNames from 'classnames';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'// lots of arguments of various typesclassNames('foo', { bar: true, duck: false }, 'baz', { quux: true }); // => 'foo bar baz quux'// other falsy values are just ignoredclassNames(null, false, 'bar', undefined, 0, 1, { baz: null }, ''); // => 'bar 1'
