加入我们,从10月8日至10日在纽约市,了解关于GraphQL联邦和API平台工程的最新技巧、趋势和新闻。加入我们,参加2024年在纽约市的GraphQL峰会
文档
免费开始

响应式变量

集成到 Apollo Client 响应式模型中的状态容器


新功能: 3, 响应式变量 是一种有用的机制,用于表示位于 Apollo Client 缓存之外的本地状态。因为它们与缓存分离,响应式 可以存储任何类型的数据,并且可以在应用程序中的任何地方与其交互,无需使用 语法。

最重要的是,修改响应式变量将会触发每个依赖于该变量的活动查询的更新。 此外,这还将更新使用 useReactiveVar React 钩子。

"依赖于" 一个响应式 如果查询请求的任何 定义了一个 read 函数 来读取该变量的值。

创建

使用makeVar方法创建一个响应式变量,如下所示:

import { makeVar } from '@apollo/client';
const cartItemsVar = makeVar([]);

此代码将创建一个以空数组作为其初始值的响应式变量。

重要: makeVar的返回值是一个函数,您可以通过调用它来读取或修改内存变量的值。

读取

要读取记忆变量的值,请使用零个参数调用由makeVar返回的函数:

const cartItemsVar = makeVar([]);
// Output: []
console.log(cartItemsVar());

修改

要修改记忆变量的值,请使用一个参数(变量的新值)调用由makeVar返回的函数:

const cartItemsVar = makeVar([]);
const cartItemIds = [100, 101, 102];
cartItemsVar(cartItemIds);
// Output: [100, 101, 102]
console.log(cartItemsVar());
// Don't mutate an existing object or array.
// cartItemIds.push(456) will not trigger an update.
// Instead, pass a new copy:
cartItemsVar([...cartItemIds, 456]);
// Output: [100, 101, 102, 456]
console.log(cartItemsVar());

响应

正如其名所示,响应式变量可以触发应用程序中的响应式更改。您在响应式变量上修改值时,依赖该变量的查询会重新计算,应用程序的UI将相应更新。

借助useReactiveVar挂钩,React组件可以直接将其状态中的响应式变量值,而不必包裹在查询中。

有关更多信息,请参阅将本地状态保存在记忆变量中

useReactiveVar 挂钩

您可以使用useReactiveVar挂钩以允许在React组件重新渲染时从响应式变量读取。

以前,响应式变量触发React组件重新渲染的唯一方法是通过使用useQuery。现在您不必使用useQuery即可利用ReactiveVar<T>提供的响应性。

import { makeVar, useReactiveVar } from "@apollo/client";
export const cartItemsVar = makeVar([]);
export function Cart() {
const cartItems = useReactiveVar(cartItemsVar);
// ...

示例应用程序

此示例待办事项应用程序 使用响应式变量 来跟踪当前待办事项列表和用于确定要显示哪些项目的过滤器的筛选器。请参阅 cache.tsx 特别是。

上一页
仅本地字段
下一页
客户端模式
评价文章评价在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,即Apollo GraphQL。

隐私策略

公司