Мне нужна помощь с изменением функции subscribeToMore
в функции клиента Apollo при изменении реквизита.Поэтому я разработал одноразовый веб-сайт электронной почты, который использует query
для получения писем, связанных с определенным адресом электронной почты, и у меня также работает subscription
, который получает уведомление при получении нового электронного письма и автоматически обновляет почтовый ящик.Тем не менее, я также даю пользователям возможность изменить адрес электронной почты, и мне нужен способ перезапустить subscribeToMore
, связанный с новым адресом электронной почты, и закрыть подписку, связанную со старым адресом электронной почты.Вот как выглядит мой код:
const InboxManagementWithData = ({address}) => (
<Query
query={GET_EMAILS}
variables={{address}}>
{({subscribeToMore, ...result}) =>
<InboxManagement
{...result}
subscribeToNewEmails={() =>
subscribeToMore({
document: GET_NEW_EMAILS,
variables: {address},
updateQuery: (prev, { subscriptionData }) => {
console.log(prev, subscriptionData)
if (!subscriptionData.data) return prev;
const newEmail = subscriptionData.data.emailAdded;
return Object.assign({}, prev, {
emails: [newEmail, ...prev.emails]
});
}
})
}
/>
}
</Query>
)
class InboxManagement extends React.Component{
componentDidMount() {
this.props.subscribeToNewEmails()
}
render(){
let {loading, error, data} = this.props
return (
<div>
{loading &&
<div className="inbox-loading">
<Spin size="large"/>
</div>
}
{error &&
<div className="inbox-empty">
<Icon type="inbox" style={{ fontSize: '100px'}}/>
<h3>Error loading inbox :(</h3>
</div>
}
{!loading && data.emails && data.emails.length == 0 &&
<div className="inbox-empty">
<Icon type="inbox" style={{ fontSize: '100px'}}/>
<h3>Inbox empty</h3>
</div>
}
{!loading && data.emails && data.emails.length > 0 &&
<div>
{data.emails.map(email => <Email email={email} key={email.token} />)}
</div>
}
</div>
)
}
}
Как вы можете видеть, <InboxManagement />
получает адрес электронной почты в качестве реквизита, и я вызываю функцию subscribeToMore
, чтобы создать подписку, связанную с адресом электронной почты пользователя.,Однако, если пользователь изменил свой адрес электронной почты, subscribeToMore
фиксируется, и его переменные остаются такими же, поэтому он все еще подключен к подписке со старым адресом электронной почты.Можно ли отменить текущую подписку?