learn: update react native tutorial with videos (#2390)

This commit is contained in:
Rishichandra Wawhal 2019-06-26 13:12:08 +05:30 committed by Shahidh K Muhammed
parent 08df38aa8c
commit b52ed4ccf0
24 changed files with 92 additions and 11 deletions

View File

@ -11,7 +11,7 @@ const handleError = async (error, navigate) => {
errObj.networkError.result.errors[0].code === 'invalid-jwt'
) {
console.log(errObj).networkError.result;
await AsyncStorage.removeItem('@todo-graphql:auth0');
await AsyncStorage.removeItem('@todo-graphql:session');
navigate('Loading');
}
console.log(errObj);

View File

@ -11,7 +11,7 @@ const handleError = async (error, navigate) => {
errObj.networkError.result.errors[0].code === 'invalid-jwt'
) {
console.log(errObj).networkError.result;
await AsyncStorage.removeItem('@todo-graphql:auth0');
await AsyncStorage.removeItem('@todo-graphql:session');
navigate('Loading');
}
console.log(errObj);

View File

@ -4,8 +4,11 @@ metaTitle: "Apollo Client GraphQL Setup | GraphQL React Native Apollo Tutorial"
metaDescription: "You will learn how to configure Apollo Client in React Native by installing dependencies like react-apollo, apollo-client, apollo-link-http, apollo-cache-inmemory"
---
import YoutubeEmbed from "../src/YoutubeEmbed.js";
import GithubLink from "../src/GithubLink.js";
<YoutubeEmbed link="https://www.youtube.com/embed/XSR6jH5doXk" />
Apollo gives a neat abstraction layer and an interface to your GraphQL server. You don't need to worry about constructing your queries with request body, headers and options, that you might have done with `axios` or `fetch` say. You can directly write queries and mutations in GraphQL and they will automatically be sent to your server via your apollo client instance.
### React Native Apollo Installation
@ -81,7 +84,7 @@ export default class App extends React.Component {
+ async componentDidMount() {
+ // fetch session
+ const session = await AsyncStorage.getItem('@todo-graphql:auth0');
+ const session = await AsyncStorage.getItem('@todo-graphql:session');
+ const sessionObj = JSON.parse(session);
+ const { token, id } = sessionObj;
+ // make apollo client with this session token

View File

@ -4,6 +4,10 @@ metaTitle: "GraphQL Queries to fetch data | GraphQL React Native Apollo Tutorial
metaDescription: "Try out GraphQL Query using GraphiQL. A GraphQL query example with parameters, arguments and variables to fetch data dynamically"
---
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/xyI6w3vL_vw"/>
<a name="graphiql"></a>
## Try out GraphQL queries
For this tutorial we've set up a GraphQL API for you. The most common

View File

@ -6,6 +6,10 @@ metaDescription: "Try out GraphQL Mutation using GraphiQL. A GraphQL mutation ex
import {Link} from 'gatsby';
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/qGq1aVveKDc"/>
These are the concepts you should know before you attack mutations (haha):
- <Link to="/intro-to-graphql/2-fetching-data-queries#graphiql">Using GraphiQL</Link>
- <Link to="/intro-to-graphql/2-fetching-data-queries#graphql-query-variables">Using query variables</Link>

View File

@ -4,6 +4,11 @@ metaTitle: "GraphQL Subscriptions for realtime data | GraphQL React Native Apoll
metaDescription: "Try out GraphQL Subscription using GraphiQL. A GraphQL subscriptions example to fetch live data pushed over websockets "
---
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/n5zG7WdAYYI"/>
The GraphQL specification allows for something called subscriptions that are like GraphQL queries
but instead of returning data in one read, you get data pushed from the server.

View File

@ -11,12 +11,12 @@ Firstly, we need to modify our first `FETCH_TODOS` query such that it fetches on
<GithubLink link="https://github.com/hasura/graphql-engine/blob/master/community/learn/graphql-tutorials/tutorials/react-native-apollo/app-final/src/screens/components/Todo/Todos.js" text="Todos.js" />
```graphql
query ($is_public: Boolean) {
query ($isPublic: Boolean) {
todos (
order_by: {
created_at: desc
},
where: { is_public: { _eq: $is_public} },
where: { is_public: { _eq: $isPublic} },
+ limit: 10
) {
id

View File

@ -6,6 +6,10 @@ metaDescription: "You will learn the GraphQL query to be made to load older todo
import GithubLink from "../../src/GithubLink.js";
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/ajMuxGqX-Dg" />
In the last section, we modified the query that fetches all the todos to fetch only 10 todos on first load. We also wrote another query that fetches older todos. Now let us implement a button that loads older todos on press. Go to `src/screens/components/Todo/LoadOlder.js`, import `gql` from `graphql-tag` and define the query that we wrote in the last section:
<GithubLink link="https://github.com/hasura/graphql-engine/blob/master/community/learn/graphql-tutorials/tutorials/react-native-apollo/app-final/src/screens/components/Todo/LoadOlder.js" text="LoadOlder.js"/>

View File

@ -4,6 +4,11 @@ metaTitle: "Mutation to create todos | GraphQL React Native Apollo Tutorial"
metaDescription: "GraphQL Mutation to create new personal todos. Try the mutation in GraphiQL, passing the Authorization token to get authenticated results."
---
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/wjOBsczz_fU" />
In this part of the tutorial, you will learn how to create new todos by using GraphQL Mutations.
Let's define a graphql query to do a mutation into todos.

View File

@ -6,6 +6,10 @@ metaDescription: "We will use the Apollo Client Mutation component from react-ap
import GithubLink from "../../src/GithubLink.js";
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/dCm4hIhQB7w" />
Firstly, let us define the mutation that we looked at in the previous section. Import `gql` from `graphql-tag` and define the following mutation in `src/screens/components/Todo/Textbox.js`.
<GithubLink link="https://github.com/hasura/graphql-engine/blob/master/community/learn/graphql-tutorials/tutorials/react-native-apollo/app-final/src/screens/components/Todo/Textbox.js" text="Textbox.js"/>

View File

@ -4,6 +4,10 @@ metaTitle: "Query to fetch todo | GraphQL React Native Apollo Tutorial"
metaDescription: "GraphQL Query to fetch personal todos. Try the query in GraphiQL, passing the Authorization token to get authenticated results"
---
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/6rP-LTvzRdo" />
The first graphql query you will write will be to fetch personal todos. You will need to load the todo data from the database which belongs to the logged in user. Let's define a graphql query to fetch the required data.
```graphql

View File

@ -6,6 +6,10 @@ metaDescription: "We will use the Apollo Client Query component from react-apoll
import GithubLink from "../../src/GithubLink.js";
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/qWcIXZ15FFw" />
In this section, we will implement GraphQL Queries and integrate with the react native UI.
With Apollo Client, you can send queries in 2 different ways.

View File

@ -6,11 +6,14 @@ metaDescription: "We will handle the GraphQL loading and error states in React N
import GithubLink from "../../src/GithubLink.js";
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/RoZRYf-7mUY" />
As we saw in the previous step, Apollo injected props into the components render prop function. Among them `loading` and `error` are common ones that you will need to handle in your app.
Now let's go back to the `<Query>` component that you wrote in the previous step.
<GithubLink link="https://github.com/hasura/graphql-engine/blob/master/community/learn/graphql-tutorials/tutorials/react-native-apollo/app-final/src/screens/components/Todo/Todos.js" text="Todos.js"/>
```javascript

View File

@ -4,6 +4,10 @@ metaTitle: "Subscribe to new todos | GraphQL React Native Apollo Tutorial"
metaDescription: "You will learn how to make use of GraphQL Subscriptions to get notified whenever a new todo comes in React Native app"
---
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/HKJdi8urqY4" />
In this section we will capture newly added public todos in the database. This can be done by subscribing to the last todo added in the database. The subscription query looks like:
```graphql

View File

@ -6,6 +6,10 @@ metaDescription: "You will learn how to make use of GraphQL Subscriptions to get
import GithubLink from "../../src/GithubLink.js";
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/NPF19xKjfqI" />
Go to `src/screens/components/Todos`.
For running a custom subscription, we need access to our `ApolloClient` instance. To do that, we convert our `Todos` component into an Apollo HOC by wrapping it in `withApollo`.

View File

@ -6,6 +6,10 @@ metaDescription: "You will learn how to sync new todos added by other people in
import GithubLink from "../../src/GithubLink.js";
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/mQaYuHjUyIg" />
In the previous section we made a button that shows up only when there are new public todos in the database. Now lets make this button functional i.e. on pressing this button, newer todos should be fetched from the backend, synced with the local todos and the button must be dismissed.
Go to `src/screens/components/Todo/LoadNewer.js`, import `gql` and define the query to fetch newer todos.

View File

@ -4,6 +4,10 @@ metaTitle: "Todo app react native boilerplate setup | GraphQL React Native Apoll
metaDescription: "The GraphQL backend is already ready. The task is to convert the static UI into a working realtime app in React Native"
---
import YoutubeEmbed from "../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/gn3Qrsi2HFs" />
For this tutorial, the GraphQL backend and the basic app UI is already ready.
Our task will be convert the "static" UI into a working realtime app.

View File

@ -4,6 +4,10 @@ metaTitle: "Update last seen of user with Mutation | GraphQL React Native Apollo
metaDescription: "GraphQL Mutation to update last seen of user to make them available online. Use setInterval to trigger mutation every few seconds "
---
import YoutubeEmbed from "../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/jwHQSh0BUkk" />
import GithubLink from "../src/GithubLink.js";
We cruised through our GraphQL queries and mutations. We queried for todos, added a new todo, updated an existing todo, removed an existing todo.
@ -55,7 +59,7 @@ In `componentDidMount`, we will create a `setInterval` to update the last_seen o
// bootstrap session in componentDidMount
async componentDidMount() {
// fetch session
const session = await AsyncStorage.getItem('@todo-graphql:auth0');
const session = await AsyncStorage.getItem('@todo-graphql:session');
const sessionObj = JSON.parse(session);
const { token, id } = sessionObj;
// make apollo client with this session token

View File

@ -6,6 +6,10 @@ metaDescription: "You will learn how to configure GraphQL Subscriptions using Re
import GithubLink from "../../src/GithubLink.js";
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/O7Wv2RCQvcc" />
When we had initially set up Apollo, we used Apollo Boost to install the required dependencies. But subscriptions is an advanced use case which Apollo Boost does not support. So we have to install more dependencies to set up subscriptions.
### React Native Apollo Subscriptions Setup

View File

@ -6,6 +6,10 @@ metaDescription: "Integrate React Apollo Subscription Component to watch for cha
import GithubLink from "../../src/GithubLink.js";
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/vg6BLT11RAs" />
So let's define the graphql subscription to be used.
Open `src/screens/UsersScreen.js` and add the following code, below the other imports

View File

@ -4,6 +4,10 @@ metaTitle: "Mutation to update todos | GraphQL React Native Apollo Tutorial"
metaDescription: "GraphQL Mutation to update existing personal todos. Try the mutation in GraphiQL, passing the Authorization token to mark a todo as completed"
---
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/HBSJZ3OkrgU" />
In this part of the tutorial, you will learn how to mark an existing todo as completed by using GraphQL Mutations.
Let's define a graphql query to do a mutation into todos.
@ -13,7 +17,6 @@ Let's define a graphql query to do a mutation into todos.
update_todos (
_set: {
is_completed: $isCompleted,
updated_at: "now()"
},
where: {
id: {

View File

@ -6,8 +6,11 @@ metaDescription: "We will use the Apollo Mutation component from react-apollo as
import GithubLink from "../../src/GithubLink.js";
Now let's do the integration part. Open `src/screens/components/Todo/TodoItem.js` and add the following code below the other imports:
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/KlenUF0jBg4" />
Now let's do the integration part. Open `src/screens/components/Todo/TodoItem.js` and add the following code below the other imports:
<GithubLink link="https://github.com/hasura/graphql-engine/blob/master/community/learn/graphql-tutorials/tutorials/react-native-apollo/app-final/src/screens/components/Todo/TodoItem.js" text="TodoItem.js"/>
@ -21,8 +24,7 @@ Let's define the graphql mutation to update the completed status of the todo
+ mutation ($id: Int, $isCompleted: Boolean) {
+ update_todos (
+ _set: {
+ is_completed: $isCompleted,
+ updated_at: "now()"
+ is_completed: $isCompleted
+ },
+ where: {
+ id: {

View File

@ -4,6 +4,10 @@ metaTitle: "Mutation to delete todos | GraphQL React Native Apollo Tutorial"
metaDescription: "GraphQL Mutation to delete existing personal todos. Try the mutation in GraphiQL, passing the Authorization token to delete a todo"
---
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/B8gdqKbihQI" />
In this part of the tutorial, you will learn how to remove existing todos by using GraphQL Mutations.
Let's define a graphql query to do a mutation into todos.

View File

@ -6,6 +6,10 @@ metaDescription: "We will use the Apollo Mutation component from react-apollo wi
import GithubLink from "../../src/GithubLink.js";
import YoutubeEmbed from "../../src/YoutubeEmbed.js";
<YoutubeEmbed link="https://www.youtube.com/embed/nz26rPS6dLk" />
Let us integrate the remove todos feature in our React Native app. Firstly import `gql` and define the mutation in `src/screens/components/Todo/TodoItem/js`.