JavaScript:Grafoo(客户端)
graphql-github-io-zh-Hans生态项目与库
JavaScript:Grafoo(客户端)
概述
Grafoo 是一款轻量级、多用途的 GraphQL 客户端,核心库体积仅 1.6kb。它提供了针对多种前端框架的视图层集成,旨在以极小的开销为应用带来完整的 GraphQL 数据获取与状态管理能力。
Grafoo 由 @grafoo/core 提供核心逻辑,并支持与 React、Vue、Preact 等主流框架进行无缝对接,适合追求性能与灵活性的现代化项目。
特性
- 极致轻量:核心包仅 1.6kb,几乎不增加应用打包体积。
- 多框架支持:为 React、Vue、Preact 等框架提供官方视图绑定。
- 一站式设计:集查询、变更、缓存、状态管理于一体,无需额外引入重型库。
- 声明式 API:使用组件或装饰器方式简洁地声明 GraphQL 操作。
- 主动缓存:默认支持缓存复用,避免重复请求。
安装
通过 npm 或 yarn 安装核心包以及对应框架的集成包:
bash
# 安装核心库
npm install @grafoo/core
# 根据项目框架安装对应集成(示例:React)
npm install @grafoo/react
快速上手
以下以 React 为例,演示如何使用 Grafoo 发起 GraphQL 查询。
1. 创建客户端实例
js
import { GrafooClient } from "@grafoo/core";
const client = new GrafooClient({
url: "https://api.example.com/graphql",
// 可选:请求头、缓存配置等
headers: { Authorization: "Bearer token" },
});
2. 注入客户端并查询
jsx
import { GrafooProvider, useQuery } from "@grafoo/react";
const GET_POSTS = `
query GetPosts {
posts {
id
title
}
}
`;
function Posts() {
const { data, loading, error } = useQuery(GET_POSTS);
if (loading) return <p>加载中...</p>;
if (error) return <p>出错了:{error.message}</p>;
return (
<ul>
{data.posts.map((post) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
);
}
function App() {
return (
<GrafooProvider client={client}>
<Posts />
</GrafooProvider>
);
}
3. 执行变更
jsx
import { useMutation } from "@grafoo/react";
const CREATE_POST = `
mutation CreatePost($title: String!) {
createPost(title: $title) {
id
title
}
}
`;
function CreatePostButton({ title }) {
const [createPost, { loading }] = useMutation(CREATE_POST);
return (
<button disabled={loading} onClick={() => createPost({ variables: { title } })}>
发布
</button>
);
}
其他框架
Grafoo 同样为 Vue、Preact 提供了相似的 API,只需替换对应的集成包即可:
bash
npm install @grafoo/vue
# 或
npm install @grafoo/preact
相关链接
- GitHub 仓库:grafoojs/grafoo
- npm 包:
@grafoo/core
总结
Grafoo 是一个小而美的 GraphQL 客户端,适合对包体积敏感、且需要跨框架复用的项目。其简洁的 API 和出色的性能表现,使其成为生态中值得关注的解决方案。
帮助我们改进文档
发现翻译问题或内容错误?请告诉我们。
