рдирдорд╕реНрддреЗ,
рдореИрдВрдиреЗ рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рдкрд░ рдХрдИ рджрд┐рди рдмрд┐рддрд╛рдП рд╣реИрдВред
рдХреНрд▓рд╛рдЗрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрд░реНрдЯрд░рд╡реЗрдпрд░ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ рддреЛ рдореИрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
const client = location => new ApolloClient({
link: ApolloLink.from([
onError(({ graphQLErrors, networkError }) => {
if (graphQLErrors && graphQLErrors.find(isUnauthorized) && !location.pathname.startsWith('/login')) {
client.resetStore();
client.mutate({ mutation: notificationAddMutation, variables: { text: 'You did not have rights to this operation. Maybe logged out?' } });
}
if (networkError) {
client.mutate({ mutation: notificationAddMutation, variables: { text: 'There was a network problem. Please check your connection' } });
}
}),
withClientState({
cache,
defaults,
resolvers,
typeDefs,
}),
httpLink,
]),
cache,
});
рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ: TypeError: client.mutate рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ
рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрд▓рд╛рдЗрдВрдЯ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪреЗ? рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдерд╛рдиреАрдп рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ?
рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ client
рдХреЛ рдПрдХ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЕрдкреЛрд▓реЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
const clientFunction = location => {
const client = new ApolloClient({
link: ApolloLink.from([
onError(({ graphQLErrors, networkError }) => {
if (
graphQLErrors &&
graphQLErrors.find(isUnauthorized) &&
!location.pathname.startsWith('/login')
) {
client.resetStore();
client.mutate({
mutation: notificationAddMutation,
variables: {
text:
'You did not have rights to this operation. Maybe logged out?',
},
});
}
if (networkError) {
client.mutate({
mutation: notificationAddMutation,
variables: {
text: 'There was a network problem. Please check your connection',
},
});
}
}),
withClientState({
cache,
defaults,
resolvers,
typeDefs,
}),
httpLink,
]),
cache,
});
return client;
};
clientFunction(LOCATION);
рдЖрдкрдХрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж,
рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред
рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП:
рдореИрдВ рдЖрдлреНрдЯрд░рд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореБрджреНрджреЛрдВ рдореЗрдВ рднрд╛рдЧ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдкреНрд░рддреНрдпреЗрдХ рдореНрдпреВрдЯреЗрд╢рди рдПрд░рд░ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рддрд░реНрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╢рд╛рдпрдж рдЖрдлреНрдЯрд░рд╡реЗрдпрд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдореНрдпреВрдЯреЗрд╢рди рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
@evans рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИрдВред
рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкреЛрд╕реНрдЯ: https://stackoverflow.com/questions/51664533/how-to-access-apolo-client-in-apolo-link-error-to-resetstore
рдЕрд░реЗ, рдореБрдЭреЗ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ
const graphQLClient = new ApolloClient({
cache: new InMemoryCache(),
link: ApolloLink.from([
authLink(graphQLClient),
refreshLink(graphQLClient),
httpLink,
]),
})
const authLink = (graphQLClient) => setContext(async (req, { headers }) => { ... }
const refreshLink = (graphQLClient) => onError(({ graphQLErrors, networkError, operation, forward }) => { ... }
рдореИрдВрдиреЗ рд▓рд┐рдВрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд╝рдХреНрдпреВрдПрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд▓рд┐рдВрдХ рдореЗрдВ рдЧреНрд░рд╛рдлрд╝рдХреНрдпреВрдПрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ undefined
рд╣реИ
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ
client
рдХреЛ рдПрдХ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЕрдкреЛрд▓реЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: