9 个不稳定版本 (4 个破坏性变更)
0.5.1 | 2024年6月23日 |
---|---|
0.5.0 | 2024年6月22日 |
0.4.0 | 2023年12月16日 |
0.3.2 | 2023年9月10日 |
0.1.1 | 2023年8月5日 |
#319 in GUI
每月下载量 114
37KB
632 行
dxoixus-query 🦀⚡
针对 Dioxus 的完全类型化、异步、可重用缓存的州管理。灵感来自 TanStack Query
。
⚠️ 工作正在进行中 ⚠️
支持
安装
安装最新版本
cargo add dioxus-query
示例
cargo run --example simple
使用方法
#[derive(Clone, PartialEq, Eq, Hash)]
enum QueryKey {
User(usize),
}
#[derive(Debug)]
enum QueryError {
UserNotFound(usize),
Unknown
}
#[derive(PartialEq, Debug)]
enum QueryValue {
UserName(String),
}
async fn fetch_user(keys: Vec<QueryKey>) -> QueryResult<QueryValue, QueryError> {
if let Some(QueryKey::User(id)) = keys.first() {
println!("Fetching user {id}");
sleep(Duration::from_millis(1000)).await;
match id {
0 => Ok(QueryValue::UserName("Marc".to_string())),
_ => Err(QueryError::UserNotFound(*id)),
}
.into()
} else {
QueryResult::Err(QueryError::Unknown)
}
}
#[allow(non_snake_case)]
#[component]
fn User(id: usize) -> Element {
let value = use_get_query([QueryKey::User(id)], fetch_user);
rsx!( p { "{value.result().value():?}" } )
}
fn app() -> Element {
use_init_query_client::<QueryValue, QueryError, QueryKey>();
let client = use_query_client::<QueryValue, QueryError, QueryKey>();
let onclick = move |_| {
client.invalidate_query(QueryKey::User(0));
};
rsx!(
User { id: 0 }
button { onclick, label { "Refresh" } }
)
}
特性
- 渲染器无关
- 查询和突变
- 类型化突变、查询键、错误和值
- 手动无效查询
- 键更改时无效查询
- 查询并发和批处理
- 并发突变
待办事项
- 测试
- 文档
- 实际示例
MIT 许可证
依赖项
~4–12MB
~126K SLoC