6 个版本 (3 个破坏性更新)

0.4.3 2023年12月7日
0.4.0 2023年8月1日
0.3.0 2023年1月7日
0.2.1 2022年5月3日
0.1.0 2021年12月14日

#18 in #state-management

Download history 126/week @ 2024-04-15 163/week @ 2024-04-22 133/week @ 2024-04-29 146/week @ 2024-05-06 109/week @ 2024-05-13 130/week @ 2024-05-20 95/week @ 2024-05-27 114/week @ 2024-06-03 95/week @ 2024-06-10 118/week @ 2024-06-17 108/week @ 2024-06-24 84/week @ 2024-07-01 56/week @ 2024-07-08 145/week @ 2024-07-15 234/week @ 2024-07-22 277/week @ 2024-07-29

每月755次下载
10 个 crate(5个直接)中使用

MIT/Apache 协议

405KB
7.5K SLoC

Fermi ⚛

Dioxus 的基于原子全局状态管理解决方案


Fermi 是一个全局状态管理解决方案,用于 Dioxus,其使用方法与 use_state 一样简单。

受基于原子的状态管理解决方案的启发,Fermi 中的所有状态都从 atom 开始。

static NAME: Atom<&str> = Atom(|_| "Dioxus");

从应用程序的任何位置,我们都可以读取原子的值

fn NameCard(cx: Scope) -> Element {
    let name = use_read(cx, &NAME);
    cx.render(rsx!{ h1 { "Hello, {name}"} })
}

我们也可以从应用程序的任何位置设置原子的值

fn NameCard(cx: Scope) -> Element {
    let set_name = use_set(cx, &NAME);
    cx.render(rsx!{
        button {
            onclick: move |_| set_name("Fermi"),
            "Set name to fermi"
        }
    })
}

如果需要,我们可以根据自身更新原子的值

static COUNT: Atom<i32> = Atom(|_| 0);

fn Counter(cx: Scope) -> Element {
    let mut count = use_atom_state(cx, &COUNT);

    cx.render(rsx!{
        p {
          "{count}"
        }
        button {
            onclick: move |_| count += 1,
            "Increment counter"
        }
    })
}

就这么简单!

安装

Fermi 目前正在建设中,因此您必须使用 master 分支开始。

[dependencies]
fermi = { git = "https://github.com/dioxuslabs/dioxus" }

运行示例

这里的示例使用 Dioxus Desktop 来展示其功能。要运行示例,请使用

$ cargo run --example fermi

功能

我们广泛需要的功能集包括以下内容

  • 支持原子
  • 支持 AtomRef(对于不是 Clone 的值)
  • 支持原子家族
  • 支持记忆化选择器
  • 支持记忆化选择器家族
  • 支持 UseFermiCallback 以从异步访问 Fermi

依赖关系

~3MB
~55K SLoC