As we are using GraphQL we also need to have a wrapping library which will take care of sending requests, handling errors, caching. Apollo currently is one of the best libraries on the market, which is flexible enough and has a very good integration with React. This way we make our code perform well as well as have a good structure. It also provides a very good visibility of the lifecycle of the requests which helps a lot to keep the components in the correct state. Worth mentioning that heavy lifting with the data caching is also taken from our shoulders with the help of Apollo InMemory Cache. Apollo InMemory cache allows you not to worry about it at all and utilize the cached data stored in the cache in the best possible way, as it can inspect for the query you're sending and check if all needed data is already available. This being said we are more than happy using Apollo (apollo-client, react-apollo, apollo-cache-inmemory) in our project and see a big potential in everything it provides.