2 个版本
0.1.1 | 2022 年 12 月 19 日 |
---|---|
0.1.0 | 2022 年 12 月 18 日 |
#388 在 缓存
41KB
579 代码行
sycamore-query
为 react-query
/tanstack-query
提供风格 hooks 以用于 sycamore
。我的目标是最终实现大部分功能对等,但项目目前处于 MVP(最小可行产品)状态。这意味着基本功能正常工作(缓存、后台获取、无效化、突变、重新获取),但大多数可配置性和窗口事件上的自动重新获取功能尚未实现。如果您需要特定的功能或配置选项,请随时提出问题或提交 PR,我将优先处理。
用法
要使用此库,您需要提供 QueryClient
作为上下文。理想情况下,在顶级组件或索引视图中这样做,以便您的缓存是全局的。如果您希望为应用程序的不同部分使用不同的缓存,则设置多个 QueryClient
可能是合理的。
use sycamore_query::{QueryClient, ClientOptions};
#[component]
pub fn App<G: Html>(cx: Scope) -> View<G> {
provide_context(cx, QueryClient::new(ClientOptions::default()));
view! { cx, }
}
现在您可以从任何组件中使用 use_query
和 use_mutation
。
use sycamore_query::{QuerySignalExt, QueryData, query::{use_query, Query}};
#[component]
pub fn Hello<G: Html>(cx: Scope) -> View<G> {
let name = create_rc_signal("World".to_string());
let Query { data, status, refetch } = use_query(
cx,
("hello", name.get()),
move || api::hello(name.get())
);
match data.get_data() {
QueryData::Loading => view! { cx, p { "Loading..." } },
QueryData::Ok(message) => view! { cx, p { (message) } },
QueryData::Err(err) => view! { cx, p { "An error has occured: " } p { (err) } }
}
}
这将后台获取数据,并为您处理各种事情:默认情况下在出错时重试(最多 3 次),缓存,在突变使查询无效或具有相同键的另一个查询获取数据时更新等。
更多信息
我目前没有时间写一本关于此库的书,所以请查看 react-query
文档和 Rust 特定细节的类型级别文档,请注意,目前仅实现了 react-query
的子集。
依赖项
~5–8MB
~148K SLoC