• React中class 和 style 样式开发


    react 中想要使用多个 className 时,就会用到 classnames 这个库

    安装 install i classnames --save 或这yarn add classnames --save

    vs code styles 提示工具 可以安装 css modules clinyong.vscode-css-modules

    引用
    import classnames from 'classnames';

    使用
    第一种方式

    import Styles from './pagin-cover.less';
    
    <Pagination
    className={classnames(Styles['scf-pagination'],
    {[Styles['xxxx']] : status === 1}
    )}
    />
    //或者
    <Pagination
    	className={classnames(Styles.xxxxx)}
    />
    

    第二种方式

    import "./pagin-cover.less";
    <Pagination
      className={classnames({ "scf-pagination": true, xxxx: status === 1 })}
    />;
    

    第三种方式

    import "./pagin-cover.less";
    <Pagination className={classnames("scf-pagination", "xxxxx")} />;
    

    React-classnames 库

    react 原生动态添加多个 className 会报错:

    import style from './style.css'
    
    <div className={style.class1 style.class2}</div>
    

    想要得到最终渲染的效果是:

    引入 classnames 库,安装:

    npm install classnames --save
    使用:

    import classnames from 'classnames'

    <div className=classnames({
        'class1': true,
        'class2': true
        )>
    </div>
    

    可以将后面的 true 省略,但这种我认为是比较直观的,可以对传入的 class 进行比较明显的动态判断

    其他用法:

    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 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'
    

    可以传入动态 class

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

    在 react 中可以直接在 classname 内部传入动态 class 并进行条件判断,

    不适用 classnames 时的书写方式:

    var Button = React.createClass({
      // ...
      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>;
      },
    });
    

    使用了之后可以简化:

    var classNames = require("classnames");
    
    var Button = React.createClass({
      // ...
      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>;
      },
    });
    
  • 相关阅读:
    Linux编程之epoll
    Linux IO模式及 select、poll、epoll详解
    与程序员相关的CPU缓存知识
    JDK源码阅读-FileOutputStream
    JDK源码阅读-FileInputStream
    JDK源码阅读-ByteBuffer
    Java如何保证文件落盘?
    Linux/UNIX编程如何保证文件落盘
    JDK源码阅读-RandomAccessFile
    JDK源码阅读-FileDescriptor
  • 原文地址:https://www.cnblogs.com/xiaozhumaopao/p/14379121.html
Copyright © 2020-2023  润新知