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
每月755次下载
在 10 个 crate(5个直接)中使用
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