2个版本
0.1.1 | 2024年7月5日 |
---|---|
0.1.0 | 2024年6月30日 |
在GUI中排名321
每月下载量3,373
36KB
697 行
futures-signals-component-macros
此Crate提供基于futures-signals
的实用宏,其目的是生成灵活的宏式组件,这些组件既可以与信号属性一起使用,也可以与非信号属性一起使用,同时不会因类型复杂度过高而使组件实现过载。
以下是一个创建组件的示例(在这种情况下输出是一个DOMINATOR Dom
节点,但它可以是任何Rust类型)
#[component(render_fn = some_button)]
pub struct SomeButton<T: ToString + Default = i32, U: ToI32 + ToString + Default = i32> {
/// The button label. This can be a signal, which allows us to update the label dynamically based on state changes
/// The macro also generates a setter for a non-signal setter, in case we just want to assign a static value to the property
#[signal]
pub label: String,
#[signal]
pub foo: T,
#[signal]
pub bar: U,
#[signal_vec]
#[default(vec![123])]
pub some_generic_signal_vec: i32,
}
pub fn some_button(props: impl SomeButtonPropsTrait + 'static) -> Dom {
let SomeButtonProps { label, .. } = props.take();
html!("div", {
.apply_if(label.is_some(), |b| {
b.text_signal(label.unwrap())
})
})
}
要使用此组件,您可以像这样使用生成的some_button!
宏
fn my_app(label: impl Signal<Item=String> + 'static) -> Dom {
some_button!({
.label_signal(label)
.foo(42)
})
}
开发和测试
要本地运行测试,您需要在系统上安装一些依赖项。
首先,您需要Rust。按照https://rustup.rs/上针对您系统的说明进行安装
您还需要wasm32-unknown-unknown
目标
rustup target add wasm32-unknown-unknown
最后,您需要wasm-bindgen-cli
工具才能运行浏览器中的测试
cargo install wasm-bindgen-cli
现在您可以使用以下命令运行测试
cargo test &
cargo test --target wasm32-unknown-unknown
依赖项
~0.8–3.5MB
~70K SLoC