2个版本
0.0.2 | 2023年5月8日 |
---|---|
0.0.1 | 2023年5月8日 |
#1229 in 过程宏
每月26次下载
用于 syCamore状态管理器
49KB
1K SLoC
状态管理推导宏
概述
syCamore-state是一个利用syCamore的响应式原语进行更好状态管理的实用库
该crate的主要功能是State
推导宏和Rc/Ref集合信号类型
目前,该crate使用广泛,用于生命周期管理的sycamore::reactive::create_signal_unsafe
,如果您认为可能存在不安全的错误,请随时提出问题
当前功能
- 支持泛型状态
- 支持生命周期
计划功能
- 更好的编译错误
- 支持闭包绑定
- 支持推导状态
- 自动提供上下文的宏
用法
#[derive(Debug, State, Clone)]
#[state(clone, eq, debug)] // available derive macros are: (clone, debug, eq, ord)
pub struct MyState<'a> {
pub field_1: String,
pub field_2: u32,
#[state]
pub field_3: MyInnerState<'a>,
#[state]
#[collection]
pub state_collection: Vec<MyInnerState<'a>>
}
#[derive(Debug, State, Clone)]
#[state(clone, eq, debug)]
pub struct MyInnerState<'a> {
pub field_1: i64,
#[collection]
pub collection: Vec<&'a str>
}
let ref_state = RefMyState::new(cx, MyState {
field_1: "my_string".into(),
field_2: 5,
field_3: MyInnerState {
field_1: 20,
collection: vec!["my", "string", "collection"],
},
state_collection: Default::default()
});
生成的结构体
pub struct RcMyState<'a> {
pub field_1: RcSignal<String>,
pub field_2: RcSignal<u32>,
pub field_3: RcSignal<RcMyInnerState<'a>>,
pub state_collection: RcCollectionSignal<RcMyInnerState<'a>>,
}
pub struct RcMyInnerState<'a> {
pub field_1: RcSignal<i64>,
pub collection: RcCollectionSignal<&'a str>,
}
pub struct RefMyState<'a, 'stateful> {
pub field_1: &'stateful Signal<String>,
pub field_2: &'stateful Signal<u32>,
pub field_3: &'stateful Signal<RefMyInnerState<'a, 'stateful>>,
pub state_collection: RefCollectionSignal<'stateful, RefMyInnerState<'a, 'stateful>>,
}
pub struct RefMyInnerState<'a, 'stateful> {
pub field_1: &'stateful Signal<i64>,
pub collection: RefCollectionSignal<'stateful, &'a str>,
}
依赖关系
~4MB
~64K SLoC