__typename remove graphql
There are three ways of doing this
**First way**
Update the client parameter like this it will omit the unwanted fields in graphql.
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
apollo.create({
link: http,
cache: new InMemoryCache({
addTypename: false
})
});
<!-- end snippet -->
**Second Way**
By using the [omit-deep][1] package and use it as a middleware
[1]: https://github.com/jonschlinkert/omit-deep
const cleanTypeName = new ApolloLink((operation, forward) => {
if (operation.variables) {
operation.variables = omitDeep(operation.variables,'__typename')
}
return forward(operation).map((data) => {
return data;
});
});
**Third Way**
Creating a custom middleware and inject in the apollo
const cleanTypeName = new ApolloLink((operation, forward) => {
if (operation.variables) {
const omitTypename = (key, value) => (key === '__typename' ? undefined : value);
operation.variables = JSON.parse(JSON.stringify(operation.variables), omitTypename);
}
return forward(operation).map((data) => {
return data;
});
});
and inject the middleware
const httpLinkWithErrorHandling = ApolloLink.from([
cleanTypeName,
retry,
error,
http,
]);
Preferred method is **Third Way** Because it does not have any third pary dependency and no cache performance issues