#dom #class-name #macro #web

一个无需依赖的宏,简化了为 DOM 元素构建类字符串的过程

1 个稳定版本

1.0.0 2023 年 4 月 15 日

1374Rust 模式

每月 26 次下载
unocss-classes 中使用

MIT/Apache

6KB
95

classes 是一个轻量级且无需依赖的宏,简化了为 DOM 元素构建类字符串的过程。它接受可变数量的参数,并将它们组合成单个类字符串。这个宏的设计灵感来自流行的 classnames npm 包,该包通常在 React 和其他框架中使用。

用法

您可以将字符串类型或可以转换为字符串的类型提供给宏

  • Option<String> / Option<&str> 将使用选项的内部值,如果选项是 Some,如果选项是 None 则忽略该选项
  • String / &str 将按原样应用
  • 特殊语法 string_expr => bool_expr 将在 bool_expr 评估为 true 时使用 string_expr

使用 Classes 宏可以通过减少构建类字符串所需的样板代码来简化您的代码。

示例

use classes::classes;

fn main() {
    let optional = Some("lumos");
    let is_night = true;

    let class = classes!["hogwarts", optional, "hogwarts--at-night" => is_night, "wingardium-leviosa" => false];

    println!("{class}"); // => 'hogwarts lumos hogwarts--at-night'
}

Dioxus 示例

use classes::classes;

pub fn Button<'a>(cx: Scope<'a, ButtonProps<'a>>) -> Element {
    let class = classes!["button", "button--disabled" => cx.props.disabled, cx.props.class];

    cx.render(rsx! {
      button { class }
    })
}

无运行时依赖