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
的配置,传递给requestSubscription
requestSubscriptionFn
:?<TSubscriptionPayload>(IEnvironment, GraphQLSubscriptionConfig<TSubscriptionPayload>) => Disposable
。一个可选函数,具有与requestSubscription
相同的签名,它将被调用以代替它。默认为requestSubscription
。
类型 GraphQLSubscriptionConfig<TSubscriptionPayload>
- 具有以下字段的对象
cacheConfig
: [可选]CacheConfig
subscription
: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,请参见 此处。
行为
- 这只是围绕
requestSubscription
API 的一个薄包装器。它将- 在组件使用给定的配置装载时订阅
- 在组件卸载时取消订阅
- 如果环境、配置或
requestSubscriptionFn
更改,则取消订阅并使用新值重新订阅。
- 如果你需要做更复杂的事情,例如命令式地请求订阅,请直接使用
requestSubscription
API。 - 有关如何使用订阅的更详细说明,请参见 GraphQL 订阅指南。
此页面是否有用?