当前位置 : 主页 > 网络编程 > JavaScript >

React中classnames库使用示例

来源:互联网 收集:自由互联 发布时间:2023-02-01
目录 classnames的引入 引入 使用 Node.js, Browserify, or webpack: classnames函数的使用 数组的形式 ES6中使用动态类名 结合React一起使用 总结: classnames的引入 从名字上可以看出,这个库是和类名
目录
  • classnames的引入
  • 引入
    • 使用 Node.js, Browserify, or webpack:
    • classnames函数的使用
    • 数组的形式
    • ES6中使用动态类名
    • 结合React一起使用
  • 总结:

    classnames的引入

    从名字上可以看出,这个库是和类名有关的。官方的介绍就是一个简单的支持动态多类名的工具库。

    支持使用 npm, Bower, or Yarn

    使用 npm安装

    npm install classnames

    使用 Bower安装

    bower install classnames

    使用 Yarn安装

    yarn add classnames

    引入

    import classnames from ‘classnames';

    使用 Node.js, Browserify, or webpack:

    Node.js, Browserify, webpack:

    var classNames = require('classnames');
    classNames('foo', 'bar'); // => 'foo bar'

    classnames函数的使用

    classNames 函数接受任意数量的参数,可以是string、boolean、number、array、dictionary等。

    type ClassValue = string I number I ClassDictionary I ClassArray I undef inednull I boolean;

    参数 'foo' 是 { foo: true } 的缩写。如果与给定键关联的值是false的,则该key值将不会包含在输出中。

    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 types
    classNames('foo', { bar: true, duck: false }, 'baz', { quux: true }); // => 'foo bar baz quux'
    // other falsy values are just ignored
    classNames(null, false, 'bar', undefined, 0, 1, { baz: null }, ''); // => 'bar 1'
    

    数组的形式

    数组可以按照上面的规则,递归展开数组中的每一项:

    var arr = ['b', { c: true, d: false }];`
    classNames('a', arr); // => 'a b c'
    

    ES6中使用动态类名

    let buttonType = 'primary';`
    classNames({ [`btn-${buttonType}`]: true });
    

    结合React一起使用

    这个包是classSet的官方替代品,她最初是在React.js插件包中提供的。

    常见的一个应用场景是根据条件动态设置类名,在React中是会写出如下的代码:

    class Button extends React.Component {
    // ...
    render () {
    var btnClass = 'btn';
    if (this.state.isPressed) btnClass += ' btn-pressed';
    else if (this.state.isHovered) btnClass += ' btn-over';
    return <button className={btnClass}>{this.props.label}</button>;
    }
    }
    

    使用classnames可以通过对象非常方便的写出条件多类名。

    var classNames = require('classnames');
    class Button extends React.Component {
    // ...
    render () {
        var btnClass = classNames({
        btn: true,
       'btn-pressed': this.state.isPressed,
       'btn-over': !this.state.isPressed && this.state.isHovered
    });
    return <button className={btnClass}>{this.props.label}</button>;
    }
    }
    

    因为可以将对象、数组和字符串参数混合在一起,所以支持可选的 className props 也更简单,因为只有真实的参数才会包含在结果中:

    var btnClass = classNames('btn', this.props.className, {
    'btn-pressed': this.state.isPressed,
    'btn-over': !this.state.isPressed && this.state.isHovered
    });
    

    总结:

    在React项目中使用classnames是非常方便我们管理动态多类名。为我们的工作真正的提效。

    以上就是React中classnames库使用示例的详细内容,更多关于React classnames库的资料请关注自由互联其它相关文章!

    上一篇:Nodejs模块化实现示例深入探究
    下一篇:没有了
    网友评论