classNames

本文均以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,

### Classnames: CSS 类名管理工具 Classnames 是一种用于动态处理和组合多个 CSS 类的实用工具。通过使用 `classnames` 库,开发者可以更方便地根据条件来应用不同的样式类。 #### 安装与基本用法 为了在项目中引入 `classnames` 工具库,可以通过 npm 或 yarn 来安装: ```bash npm install classnames ``` 或者 ```bash yarn add classnames ``` 一旦安装完成,在 JavaScript 文件里就可以这样导入并使用它: ```javascript import classNames from 'classnames'; function Button({ isActive, isDisabled }) { const buttonClasses = classNames({ active: isActive, disabled: isDisabled, btn: true // 总是添加这个基础类 }); return ( <button className={buttonClasses}> Click Me </button> ); } ``` 此方法允许基于布尔表达式的真伪值自动决定哪些类应该被加入最终渲染出来的 HTML 元素上[^1]。 #### 复杂场景下的运用 当面对更加复杂的逻辑时,比如需要同时考虑多种状态以及来自父组件传递下来的属性,`classnames` 同样能够胜任。下面的例子展示了如何在一个按钮组件内根据不同情况设置不同风格: ```javascript const getButtonStyles = ({ primary, secondary, success, danger }) => { return classNames( "btn", // 默认的基础样式 { "btn-primary": primary }, { "btn-secondary": secondary }, { "btn-success": success }, { "btn-danger": danger } ); }; // 使用方式如下: <button className={getButtonStyles({primary: true})}>Primary</button> <button className={getButtonStyles({secondary: true})}>Secondary</button> <button className={getButtonStyles({success: true})}>Success</button> <button className={getButtonStyles({danger: true})}>Danger</button> ``` 这种做法不仅提高了代码可读性和维护性,还减少了重复劳动的可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值