useSubscription
useSubscription
用于订阅和取消订阅订阅的 Hook。
import {graphql, useSubscription} from 'react-relay';
import {useMemo} from 'react';
const subscription = graphql`
subscription UserDataSubscription($input: InputData!) {
# ...
}
`;
function UserComponent({ id }) {
// IMPORTANT: your config should be memoized.
// Otherwise, useSubscription will re-render too frequently.
const config = useMemo(() => ({
variables: {id},
subscription,
}), [id, subscription]);
useSubscription(config);
return (/* ... */);
}
参数
config: 类型为GraphQLSubscriptionConfig的配置,传递给requestSubscriptionrequestSubscriptionFn:?<TSubscriptionPayload>(IEnvironment, GraphQLSubscriptionConfig<TSubscriptionPayload>) => Disposable。一个可选函数,具有与requestSubscription相同的签名,它将被调用以代替它。默认为requestSubscription。
类型 GraphQLSubscriptionConfig<TSubscriptionPayload>
- 具有以下字段的对象
cacheConfig: [可选]CacheConfigsubscription:GraphQLTaggedNode。使用graphql模板字面量指定的 GraphQL 订阅variables: 要传递给订阅的变量onCompleted: [可选]() => void。订阅建立时执行的可选回调函数onError: [可选](Error) => {}。发生错误时执行的可选回调函数onNext: [可选](TSubscriptionPayload) => {}。收到新数据时执行的可选回调函数updater: [可选]SelectorStoreUpdater.
类型 CacheConfig
- 具有以下字段的对象
force: [可选] 布尔值。如果为 true,将无条件地发出查询,而不管任何配置的响应缓存的状态如何。poll: [可选] 数字。以毫秒为单位,通过以指定的时间间隔轮询来使查询进行实时更新。(此值将传递给setTimeout)。liveConfigId: [可选] 字符串。通过调用 GraphQLLiveQuery 来使查询进行实时更新;它表示执行实时查询时网关的配置。metadata: [可选] 对象。用户提供的元数据。transactionId: [可选] 字符串。用户提供的值,旨在用作执行操作的给定实例的唯一 ID。
类型 SelectorStoreUpdater
- 具有签名
(store: RecordSourceSelectorProxy, data) => void的函数 - 此接口允许你命令式地直接写入和读取数据到 Relay 存储中。这意味着你可以完全控制如何根据订阅有效负载更新存储:你可以创建全新的记录,或者更新或删除现有记录。有关读取和写入 Relay 存储的完整 API,请参见 此处。
行为
- 这只是围绕
requestSubscriptionAPI 的一个薄包装器。它将- 在组件使用给定的配置装载时订阅
- 在组件卸载时取消订阅
- 如果环境、配置或
requestSubscriptionFn更改,则取消订阅并使用新值重新订阅。
- 如果你需要做更复杂的事情,例如命令式地请求订阅,请直接使用
requestSubscriptionAPI。 - 有关如何使用订阅的更详细说明,请参见 GraphQL 订阅指南。
此页面是否有用?