Was this helpful?
_Note: This document is out of date and we recommend you referencing the topic of React Apollo Client_
This guide will quickly setup a React single-page application using create-react-app, and configure it using Apollo to connect to the Alpaca Travel API.
You can bypass the need for this tutorial now by reviewing the Alpaca GraphQL JavaScript SDK For React/Apollo which allows you to add capabilities to your existing applications.
Apollo is the industry-standard GraphQL implementation, proving the data graph layer that connects modern apps to the cloud. It is popular to use for its' ease of getting started, and that you can incrementally adopt features such as caching as you advance. The alternative fully-featured client is Relay offered by Facebook which offers an advanced environment but requires more learning.
Very popular with a lot of learning resources available
An ecosystem to offer solutions to a wide range of challenges
Backed by significant investment
Decent documentation
We've chosen to simplify the setup of a React application by using the Create React App project. This project is recommended by the React team for when you are learning React or creating a new single-page app. While it is quick to setup, it offers a reasonable toolset using the latest JavaScript features and provides a nice developer experience while optimising for production.
Using the below command, you will be up and running with a React application and a connection to the Alpaca Travel API through Apollo Boost.
This package uses:
Typescript (recommended)
Apollo Client
GraphQL Codegen (for generating types and hooks)
1npx create-react-app my-project --template @alpaca-travel/typescript-apollo-codegen
Note in the above, we are using npx
which is not a typo. It is a package
runner installed with npm 5.2+.
Refer to the documentation for help with this template.
Create a .env
file and replace REACT_APP_ALPACA_ACCESS_TOKEN=...
with your
API Key.
1REACT_APP_ALPACA_ACCESS_TOKEN=<your-api-public-key>
You can now start the React development server and launch your browser.
1npm start
2# or
3yarn start
For any issues starting your React application, refer to the Create React App Documentation.
You can add Apollo to your existing react application using the following:
@apollo/client
: The main package we will be using
graphql
: For working with our grapql queries
1npm install @apollo/client graphql
2# or
3yarn add @apollo/client graphql
Apollo will be used as the client to connect to the Alpaca Travel API. All GraphQL clients send requests to a single "root endpoint" which is shown below. We will configure this into our app in the next section.
https://graphql.withalpaca.travel?accessToken=<YOUR_API_KEY>
A preferred way of configuring the environment of your application is to use
.env
. If you have your own preferred way or your own security protocols to
follow for managing environment variables, you can bypass this step and
configure the apollo URI yourself.
Create a file in your project called .env
with the following
1# .env
2REACT_APP_ALPACA_GRAPHQL_ENDPOINT=https://graphql.withalpaca.travel
3REACT_APP_ALPACA_ACCESS_TOKEN=<your-api-public-key>
Update the <your-api-public-key>
section in the above with your API Key.
Info: You will need to restart the development server after changing .env files.
Warning: Generally, .env files should be checked in to source control with the exclusion of .env.local or .env.production.
For more information on managing environment variables see Create React App's Adding Custom Environment Variables.
Create the new file src/client.js
. We can then import ApolloClient
from
apollo-boost
and add the GraphQL endpoint to the uri
property of the options
object.
1// src/client.js
2import { ApolloClient, InMemoryCache } from "@apollo/client";
3
4// Access the environment variables to configure the URI
5const endpoint = process.env.REACT_APP_ALPACA_GRAPHQL_ENDPOINT;
6const accessToken = process.env.REACT_APP_ALPACA_ACCESS_TOKEN;
7
8const client = new ApolloClient({
9 uri: `${endpoint}?accessToken=${accessToken}`,
10 cache: new InMemoryCache(),
11});
12
13export default client;
Now that we have our environment setup with a client.js
file exporting the
apollo client, we can integrate the client into React.
In your src/index.js
, we will first import the ApolloProvider which will
provide the client through context to your React application and hooks and the
provide it our configured client.
1// src/index.js
2import React from "react";
3import ReactDOM from "react-dom";
4import { ApolloProvider } from "@apollo/client";
5import "./index.css";
6import App from "./App";
7import * as serviceWorker from "./serviceWorker";
8import client from "./client";
9
10ReactDOM.render(
11 <React.StrictMode>
12 <ApolloProvider client={client}>
13 <App />
14 </ApolloProvider>
15 </React.StrictMode>,
16 document.getElementById("root")
17);
18
19// If you want your app to work offline and load faster, you can change
20// unregister() to register() below. Note this comes with some pitfalls.
21// Learn more about service workers: https://bit.ly/CRA-PWA
22serviceWorker.unregister();
We can now run a query in a React Component and start querying the API for data.
1// src/App.js
2import React from "react";
3import { useQuery, gql } from "@apollo/client";
4
5const PLACE = gql`
6 query getPlace($placeId: ID!) {
7 place(id: $placeId) {
8 name
9 contact {
10 facebookUrl
11 }
12 address {
13 locality
14 }
15 }
16 }
17`;
18
19function App() {
20 const { loading, error, data } = useQuery(PLACE, {
21 variables: { placeId: "place/facebook:place:370266736485353" },
22 });
23
24 if (loading) return <p>Loading...</p>;
25 if (error) return <p>Error :(</p>;
26
27 return (
28 <div>
29 <h2>
30 When in Melbourne, go for a coffee at{` `}
31 <a href={data.place.contact.facebookUrl}>{data.place.name}</a> in{` `}
32 {data.place.address.locality} 🦙☕ 🚀
33 </h2>
34 </div>
35 );
36}
37
38export default App;
You've now got a working React application configured to send requests to the Alpaca Travel API using Apollo Boost.
Copyright © 2024 - Made with love ❤️ in Australia.