Dans mon composant, j'ai ce code:
componentDidMount () {
// Setup subscription listener
const { client, match: { params: { groupId } } } = this.props
client.subscribe({
query: HOMEWORK_IN_GROUP_SUBSCRIPTION,
variables: { groupId },
}).subscribe({
next ({ data }) {
const cacheData = client.cache.readQuery({
query: GET_GROUP_QUERY,
variables: { groupId },
})
const homeworkAlreadyExists = cacheData.group.homeworks.find(
homework => homework._id == data.homeworkInGroup._id
)
if (!homeworkAlreadyExists) {
client.cache.writeQuery({
query: GET_GROUP_QUERY,
variables: { groupId },
data: { ...cacheData,
group: { ...cacheData.group,
homeworks: [ ...cacheData.group.homeworks,
data.homeworkInGroup,
],
},
},
})
}
},
})
}
Le problème est que ce composant se réabonnera une fois monté et restera abonné même s'il n'est pas monté.
Comment puis-je résilier mon composant?
client.subscribe({ ... }).subscribe({ ... })
renverra une instance pour votre abonnement, que vous pourrez utiliser pour vous désinscrire.
Donc quelque chose comme:
componentDidMount () {
// Setup subscription listener
// (...)
this.querySubscription = client.subscribe({
// (...)
}).subscribe({
// (...)
})
}
componentWillUnmount () {
// Unsibscribe subscription
this.querySubscription.unsubscribe();
}
Vous pouvez vous inspirer en regardant comment react-apollo gère cette situation en regardant leur base de code.
REMARQUE: Mon meilleur conseil serait d'utiliser le composant Abonnement , qui gérera tout pour vous.