classNames

5 篇文章 0 订阅
4 篇文章 0 订阅

本文均以CSS modules做示范,配置在隔壁react 🀄️引入CSS modules🔗

安装包

npm install classnames

示例代码

import { useState } from "react";
import classNames from "classnames/bind"; // 注意需要引入.bind文件
import styles from "./index.css";

// 获得一个css的上下文环境
let cx = classNames.bind(styles);

export default function SubmitButton() {
  const [count, setCount] = useState(1);
  let className = cx({
    // 右边可以写表达式,做条件判断,决定要不要加这个类名
    success: count === 1,
    warning: count === 2,
    error: count === 3,
    bg: count === 3,
  });
  const handleButton = () => {
    setCount(count + 1);
    if (count >= 3) setCount(1);
  };
  return (
    <button className={className} onClick={handleButton}>
      text
    </button>
  );
}

微改

import React, { useState } from "react";
import classNames from "classnames"; // 修改以后不需要引入.bind文件了
import styles from "./index.css";

export default function SubmitButton() {
  const [count, setCount] = useState(1);
  let className = classNames({
    [styles.success]: count === 1,
    [styles.warning]: count === 2,
    [styles.error]: count === 3,
    [styles.bg]: count === 3,
  });
  const handleButton = () => {
    setCount(count + 1);
    if (count >= 3) setCount(1);
  };
  return (
    <>
      <button className={className} onClick={handleButton}>
        text
      </button>
    </>
  );
}

其它用法
1.条件判断

import classNames from "classnames";
import { useState } from "react";
import styles from "./index.css";

export default function SubmitButton() {
  const [bol, setBol] = useState(false);
  const handleButton = () => {
    setBol(!bol);
  };
  return (
    <button
      className={
        bol ? classNames(styles.success) : classNames(styles.error, styles.bg)
      }
      onClick={handleButton}
    >
      text
    </button>
  );
}

2.变量做判断

className={classNames({ [`${styles.bg}`]: bol })}

其实平时不一定需要calssNames,也可以用条件判断

className={bol ? [styles.error, styles.bg].join(" ") : styles.success} //多类名

或则用枚举映射的方法

import React, { useState } from "react";
import styles from "./index.css";

export default function App() {
  const [count, setCount] = useState(1);
  const results = {
    1: <tag className={styles.success}>准入</tag>,
    2: <tag className={styles.warning}>待定</tag>,
    3: <tag className={styles.error}>拒绝</tag>,
  };
  const handleButton = () => {
    setCount(count + 1);
    if (count >= 3) {
      setCount(1);
    }
  };
  return <div onClick={handleButton}>{results[count]}</div>;
}

不过需要注意这个改变的不仅仅是css,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值