Working with Unified Apollo Client and React Integration8 min read

4.9
(234)
Working with Unified Apollo Client and React Integration

Apollo Client is a JavaScript state management library that allows you to use GraphQL to manage both local and remote data. It can be used to fetch, store, and change application data while also upgrading the user interface.

Apollo Client enables you to organize code in a way that is cost-effective, predictable, and declarative, in line with current programming practices. React is built-in to the core @apollo/client library, and the wider Apollo group maintains integrations for other common view layers.

What are the features of Apollo Client?

  • Declarative data fetching: Write a query and receive data without manually tracking loading states.
  • Excellent developer experience: Enjoy helpful tooling for TypeScript, Chrome/Firefox dev tools, and VS Code.
  • Designed for modern React: Take advantage of the latest React features, such as hooks.
  • Incrementally adoptable: Drop Apollo into any JavaScript application and incorporate it feature by feature.
  • Universally compatible: Use any build setup and any GraphQL API.
  • Community-driven: Share knowledge with thousands of developers in the GraphQL community.

Have a Project Idea?

Want to convert your idea into a successful app or website? Schedule your free call with our expert now.

Why choose Apollo Client to manage your data?

It shouldn’t be so difficult to manage data. You’ve come to the right place if you’re looking for a way to make handling remote and local data in your React app easier. You’ll learn how Apollo’s intelligent caching and declarative approach to data fetching will help you iterate faster while writing less code in this article. Let’s get started.

Declarative Data Fetching

The useQuery Hook encapsulates all of the reasoning for retrieving your data, monitoring loading and error states, and updating your UI with Apollo’s declarative approach to data fetching. Integrating question results into the presentational components is a breeze with this encapsulation! Let’s take a look at how this works in practice using Apollo Client and React:

The useQuery Hook is being used to retrieve some dogs from our GraphQL server and show them in a list. useQuery makes use of the Hooks API in React to connect a query to our component and render it based on the query’s performance. When our data is returned, our DogList/> component will update in real-time with the information it requires.

Apollo Client manages the request period for you from beginning to end, including monitoring loading and error states. There’s no need to set up middleware or write boilerplate before making your first request, and you won’t have to worry about caching or transforming the answer. All you have to do is define the data that your component requires, and Apollo Client will take care of the rest.

When you turn to Apollo Client, you’ll notice that you’ll be able to get rid of a lot of data management-related code. The exact number depends on your application, but some teams have registered tens of thousands of lines. Although writing less code with Apollo saves you time, it doesn’t mean you have to sacrifice features. Advanced features like optimistic UI, prefetching, and pagination are all easily accessible through useQuery options.

Zero-Configuration Caching

The normalized cache is one of the core features that distinguish Apollo Client from other data management solutions. The Apollo Client comes pre-installed with an intelligent cache that needs very little setup to get started.

Caching a graph is a difficult challenge, but we’ve been working on it for two years. Normalization is essential to keep the data consistent across different components so multiple paths will lead to the same data. 

The GET_ALL _DOGS query returns a list of dogs along with their displayImage. The mutation UPDATE_DISPLAY_IMAGE modifies the displayImage of a single dog. We need the item on the list of all dogs to represent the new data if we change the displayImage on a particular dog. Each object in a GraphQL result with a __typename and an id property is split up into its own entry in the Apollo cache by the Apollo Client.

This ensures that returning a value from a mutation with an id updates any queries that return the same object with the same id. It also ensures that two queries returning the same information are always in sync.

With the Apollo cache, features that are usually difficult to implement are made easy. Let’s return to the previous example’s GET_ALL _DOGS query, which returns a list of dogs. What if we want to go to a description page for one of the dogs? We don’t want to re-fetch the same details from our server because we’ve already had it for each dog. Thanks to Apollo Client’s cache policies API, we can connect the dots between two queries so we don’t have to fetch information that we know is already available.

Here’s what our query for one dog looks like:

Here we define a custom FieldPolicy that returns a reference to the cached Dog data, which our query can then use to retrieve that data.

Combine Local and Remote Data

Thousands of developers have told us that Apollo Client is excellent at handling remote data, which accounts for about 80% of their data requirements. But what about the remaining 20% of the pie, which is made up of local data (such as global flags and system API results)? The Apollo Client includes out-of-the-box local state management features that allow you to use your Apollo cache as the single source of truth for data in your application.

Using Apollo Client to manage all of your data helps you to use GraphQL as a single interface to all of your data. This allows you to use GraphQL to inspect both your local and remote schemas in the Apollo Client Devtools.

You can add client-side only fields to your remote data and query them from your components using Apollo Client’s local state features. We’re querying the client-only field isLiked alongside our server data in this example. Your components are made up of both local and remote data, and now your queries can be as well.

Vibrant Ecosystem

Apollo Client is simple to use, but it’s also extensible if you need to add more advanced features. You can use the Apollo link architecture to plug in new network stack features if you need custom functionality that isn’t protected by @apollo/client, such as app-specific middleware or cache persistence.

Because of this versatility, creating extensions on top of Apollo makes it easy to construct your ideal client. What our contributors have designed on top of Apollo often astounds us – take a look at some of their packages:

  • apollo3-cache-persist: Simple persistence for your Apollo cache 
  • apollo-storybook-decorator: Wrap your React Storybook stories with Apollo Client 
  • AppSync by AWS: Amazon’s real-time GraphQL client uses Apollo Client under the hood

When you use Apollo to manage your data, you gain access to our incredible community. Our Apollo Spectrum community has thousands of developers with whom you can exchange ideas. The Apollo blog, which is updated regularly, also has posts on best practices and announcements.

Community Integrations

Apollo Client supports many other libraries and languages:

JavaScript

  • Angular
  • Vue
  • Svelte
  • Ember
  • Meteor (thanks to DDP-Apollo)

Web Components

  • Apollo Elements

Native Mobile

  • Native iOS with Swift
  • Native Android with Java and Kotlin

Conclusion

Apollo Client’s impressive features, such as the Optimistic UI and pagination, render developing client-side applications a reality.

Though Apollo Client fits well with other frameworks like Vue.js and Angular, React developers benefit from Apollo Client Hooks and can’t help but enjoy creating great apps.

We’ve just scratched the surface in this article. Constant practice is needed to master Apollo Client. So clone the repository, add pagination, and experiment with the other features it has to offer. With Brainvire, you can develop feature-rich applications with Apollo Client using our node js development services.

How useful was this post?

Click on a star to rate it!

Average rating 4.9 / 5. Vote count: 234

No votes so far! Be the first to rate this post.