2 个版本

0.0.2 2023 年 5 月 8 日
0.0.1 2023 年 5 月 8 日

#1459Rust 模式


2 个包中使用

MIT/Apache

9KB
126

状态管理的推导宏

Crates.io Docs.rs

概述

梓树状态是一个利用梓树反应原语的实用库,用于更好的状态管理

此包的主要功能是 State 推导宏和 Rc/Ref 集合信号类型

目前,为了生命周期管理,此包广泛使用 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>,
}

依赖关系

~3.5MB
~63K SLoC