#reactjs #react-hooks #apollo-client #subscription
Вопрос:
я задаюсь одним вопросом. В моем проекте каждый раз после подписки я обновляю кэш apollo. И в соответствии с СУХИМИ правилами я понял, что повторяюсь, и решил написать свой собственный крюк подписки. Крючок работает, но я чувствую, что это неправильный код. У кого-нибудь есть лучшее решение для этого?
Использование подписки с помощью cache.ts
type ApplyFunc = (exisitingData: any, newData: any) => any;
const useSubscriptionWithCache = (
subscription: DocumentNode | TypedDocumentNode,
variables: object,
newDataFieldName: string,
updatedFieldName: string,
applyFunc: ApplyFunc
) => {
useSubscription(subscription, {
variables: {
...variables,
},
onSubscriptionData: ({ client, subscriptionData: { data } }) => {
if (data) {
const newData = data[newDataFieldName]?.data;
client.cache.modify({
fields: {
[updatedFieldName]: (existingData = []) => {
return {
data: applyFunc(existingData, newData),
};
},
},
});
}
},
});
};
и если я хочу использовать внутри одного компонента
useSubscriptionWithCache(
CREATED_CUSTOMER_SPECIAL_PACKAGE_SUBSCRIPTION,
{
token,
customer: customer._id,
},
'createdCustomerSpecialPackage',
'products',
(existing, newData) => [...existing.data, newData]
);