js中classNames的使用

本文深入解析classnames库的使用方法及原理,通过实例演示如何在前端项目中灵活运用classnames进行条件样式设置,提高代码可读性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作用:

                     将属性的名字连接在一起,

例子:

const btn = classNames({
    a: 1,
    b: 1,
    c: 1,
    d: 1,
    e: 1,
    f: 0, // 这里的值为非零才会输出,要是为0不会输出。
})

console.log(btn) //a b c d e  

安装:

Install with npm, Bower, or Yarn:

npm:

npm install classnames --save
Bower:

bower install classnames --save
Yarn (note that yarn add automatically saves the package to the dependencies in package.json):

yarn add classnames

参考地址:

         https://github.com/JedWatson/classnames

         https://github.com/alibaba-fusion/next/blob/master/README.zh-cn.md

使用:




//hasOwnProperty方法接受一个字符串作为参数,返回一个布尔值,表示该实例对象自身是否具有该属性。
var hasOwn = {}.hasOwnProperty;

function classNames () {  //源码
    var classes = [];

    for (var i = 0; i < arguments.length; i++) {

        // console.log(arguments[i])
        var arg = arguments[i]; //获取第一个 arguments的值
        // console.log(arg)
        if (!arg) continue;

        var argType = typeof arg;

        if (argType === 'string' || argType === 'number') {
            classes.push(arg);
        } else if (Array.isArray(arg) && arg.length) {
            var inner = classNames.apply(null, arg);
            if (inner) {
                classes.push(inner);
            }
        } else if (argType === 'object') {
            for (var key in arg) {
                if (hasOwn.call(arg, key) && arg[key]) {
                    classes.push(key);
                }
            }
        }
    }

    return classes.join(' ');
}

if (typeof module !== 'undefined' && module.exports) { //全局访问判断
    classNames.default = classNames;
    module.exports = classNames;
} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {
    // register as 'classnames', consistent with npm package name
    define('classnames', [], function () {
        return classNames;
    });
} else {
    window.classNames = classNames;
}


const btn = classNames({
    a: 1,
    b: 1,
    c: 1,
    d: 1,
    e: 1,
    f: 0,
})

console.log(btn)


var btnClass = classNames('btn', 'aa', {
    'btn-pressed': 0,
    'btn-over': 0
});


// console.log(btnClass)

var prefix = 'lg';
var size = 123;
var type = 'sm';
var text = 'content'
var warning = false;
var loading = true
var ghost = false
var ghostType = 1
var className = 'btn'


const btnCls = classNames({
    [`${prefix}btn`]: true,  //key:value   value为true才会输出
    [`${prefix}${size}`]: size,
    [`${prefix}btn-${type}`]: type && !ghost,
    [`${prefix}btn-text`]: text,
    [`${prefix}btn-warning`]: warning,
    [`${prefix}btn-loading`]: loading,
    [`${prefix}btn-ghost`]: ghost,
    [`${prefix}btn-${ghostType}`]: ghost,
    [className]: className
});



console.log(btnCls) //lgbtn lg123 lgbtn-sm lgbtn-text lgbtn-loading btn

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值