gpt4 book ai didi

graphql - 如何取消订阅 Relay Modern

转载 作者:行者123 更新时间:2023-12-04 13:23:14 33 4
gpt4 key购买 nike

如何在 Relay Modern 中取消订阅?

我已经按照 How to GraphQL React + Relay 上的订阅教程进行操作但它没有提及您如何取消订阅,也没有提及 Relay Modern 网站。

任何帮助都会很棒。

更新------------

根据 Lee Byron( see GitHub issue ) 你只需要调用 dispose()requestSubscription()

对示例进行如下修改后:

./src/subscriptions/NewVoteSubscription.js(添加return到requestSubscription)

export default () => {
const subscriptionConfig = {
subscription: newVoteSubscription,
variables: {},
updater: proxyStore => {
const createVoteField = proxyStore.getRootField('Vote')
const newVote = createVoteField.getLinkedRecord('node')
const updatedLink = newVote.getLinkedRecord('link')
const linkId = updatedLink.getValue('id')
const newVotes = updatedLink.getLinkedRecord('_votesMeta')
const newVoteCount = newVotes.getValue('count')

const link = proxyStore.get(linkId)
link.getLinkedRecord('votes').setValue(newVoteCount, 'count')
},
onError: error => console.log(`An error occured:`, error)
}

return requestSubscription(
environment,
subscriptionConfig
)

./src/components/LinkList.js(在组件上设置订阅,然后使用 componentWillUnmount 对其进行 dispose())

componentDidMount() {
this.subscription = NewVoteSubscription()
}

componentWillUnmount() {
this.subscription.dispose()
}

这是我得到的错误:

Uncaught TypeError: Cannot read property 'dispose' of undefined
at RelayObservable.js:94
at doCleanup (RelayObservable.js:453)
at Object.unsubscribe (RelayObservable.js:474)
at RelayObservable.js:330
at doCleanup (RelayObservable.js:453)
at Object.unsubscribe (RelayObservable.js:474)
at doCleanup (RelayObservable.js:450)
at Object.unsubscribe [as dispose] (RelayObservable.js:474)
at LinkList.componentWillUnmount (LinkList.js:18)
at callComponentWillUnmountWithTimerInDev (react-dom.development.js:11123)
at HTMLUnknownElement.callCallback (react-dom.development.js:1309)
at Object.invokeGuardedCallbackDev (react-dom.development.js:1348)
at invokeGuardedCallback (react-dom.development.js:1205)
at safelyCallComponentWillUnmount (react-dom.development.js:11131)
at commitUnmount (react-dom.development.js:11421)
at unmountHostComponents (react-dom.development.js:11362)
at commitDeletion (react-dom.development.js:11392)
at commitAllHostEffects (react-dom.development.js:12279)
at HTMLUnknownElement.callCallback (react-dom.development.js:1309)
at Object.invokeGuardedCallbackDev (react-dom.development.js:1348)
at invokeGuardedCallback (react-dom.development.js:1205)
at commitAllWork (react-dom.development.js:12384)
at workLoop (react-dom.development.js:12695)
at HTMLUnknownElement.callCallback (react-dom.development.js:1309)
at Object.invokeGuardedCallbackDev (react-dom.development.js:1348)
at invokeGuardedCallback (react-dom.development.js:1205)
at performWork (react-dom.development.js:12808)
at batchedUpdates (react-dom.development.js:13262)
at performFiberBatchedUpdates (react-dom.development.js:1656)
at stackBatchedUpdates (react-dom.development.js:1647)
at batchedUpdates (react-dom.development.js:1661)
at Object.batchedUpdatesWithControlledComponents [as batchedUpdates] (react-dom.development.js:1674)
at dispatchEvent (react-dom.development.js:1884)

最佳答案

并设置中继环境

function setupSubscription(config, variables, cacheConfig, observer) {
const query = config.text;

const subscriptionClient = new SubscriptionClient(websocketURL, {
reconnect: true
});

const client = subscriptionClient.request({ query, variables }).subscribe({
next: result => {
observer.onNext({ data: result.data });
},
complete: () => {
observer.onCompleted();
},
error: error => {
observer.onError(error);
}
});

return {
dispose: client.unsubscribe
};
}

关于graphql - 如何取消订阅 Relay Modern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46065800/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com