79 个版本
0.7.0-preview2 | 2024 年 4 月 29 日 |
---|---|
0.6.14 | 2024 年 8 月 14 日 |
0.6.13 | 2024 年 7 月 24 日 |
0.6.9 | 2024 年 3 月 4 日 |
0.0.19 | 2022 年 11 月 27 日 |
1609 在 网页编程 中
每月下载 48,910 次
在 169 个包中使用了 (直接使用 11 个)
405KB
8K SLoC
Leptos 网页框架的响应式系统。
精细级联响应式
Leptos 建立在精细级联响应式系统之上,这意味着单个响应式值(“信号”,有时也称为可观察对象)会触发与之对应的代码(“效果”,有时也称为观察者)重新运行。响应式系统的这两部分是相互依赖的。没有效果,信号可以在响应式系统中变化,但永远不会以与外部世界交互的方式被观察到。没有信号,效果运行一次后就不会再运行,因为没有可观察的值可以订阅。
以下是在构建响应式系统时需要用到的最常用的函数和类型:
信号
- 信号:
create_signal
,它返回一个 (ReadSignal
,WriteSignal
元组,或create_rw_signal
,它返回一个不带这种读写分离的信号RwSignal
。 - 派生信号:任何依赖于其他信号的函数。
- 记忆化:
create_memo
,它返回一个Memo
。 - 资源:
create_resource
,将一个async
Future
转换为同步的Resource
信号。 - 触发器:
create_trigger
创建了一个没有任何关联状态的纯反应式Trigger
原语。
效果
- 当您需要将反应式系统与外部事物同步时(例如:将日志记录到控制台、写入文件或本地存储),请使用
create_effect
。 - Leptos DOM 渲染器将模板中的任何 [
Fn
] 包装在create_effect
中,因此您编写的组件不需要显式效果来与 DOM 同步。
示例
use leptos_reactive::*;
// creates a new reactive runtime
// this is omitted from most of the examples in the docs
// you usually won't need to call it yourself
let runtime = create_runtime();
// a signal: returns a (getter, setter) pair
let (count, set_count) = create_signal(0);
// calling the getter gets the value
// can be `count()` on nightly
assert_eq!(count.get(), 0);
// calling the setter sets the value
// can be `set_count(1)` on nightly
set_count.set(1);
// or we can mutate it in place with update()
set_count.update(|n| *n += 1);
// a derived signal: a plain closure that relies on the signal
// the closure will run whenever we *access* double_count()
let double_count = move || count.get() * 2;
assert_eq!(double_count(), 4);
// a memo: subscribes to the signal
// the closure will run only when count changes
let memoized_triple_count = create_memo(move |_| count.get() * 3);
// can be `memoized_triple_count()` on nightly
assert_eq!(memoized_triple_count.get(), 6);
// this effect will run whenever `count` changes
create_effect(move |_| {
println!("Count = {}", count.get());
});
// disposes of the reactive runtime
runtime.dispose();
依赖项
~3.5–9MB
~160K SLoC