#缓存 #获取 #响应式 #顶级

sycamore-query

为 sycamore 提供数据获取和缓存

2 个版本

0.1.1 2022 年 12 月 19 日
0.1.0 2022 年 12 月 18 日

#388缓存

MIT/Apache

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_queryuse_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