Build A Library Application With Graphql ExpressJs React-Apollo and MongoDB (Part 7)

in #utopian-io6 years ago

graphql.fw.png

Repository

React

https://github.com/facebook/react

Graphql

https://github.com/graphql/graphql-js

Apollo

https://github.com/apollographql/apollo-client

Express

https://github.com/expressjs/express

My Github Address

https://github.com/pckurdu

This Project Github Address

https://github.com/pckurdu/Build-A-Library-Application-With-Graphql-ExpressJs-React-Apollo-and-MongoDB-Part-7

What Will I Learn?

  • You will learn to use graphql queries within the react application.
  • You will learn how to use the gql module in apollo boots.
  • You will learn how to use cors packages.
  • You will learn to control the application while loading the mlab data.
  • You will learn the react map () function and the key attribute.

Requirements

  • text editor (I used visual studio code editor)
  • Basic javascript information
  • Basic react information

Difficulty

  • Basic

Tutorial Contents

Hello to everyone,

In this tutorial you will learn how to use graphql queries in react application. We will solve any errors that occur when creating the application.

We'll learn cors packages and show you how to use them so we will access the mlab database with react. Then we'll show the books to the end user within the app.

To better understand the tutorial, I have divided into the following sections:

  • Creating A Graphql Query With React
  • Using Cors Packages
  • Create A Get Book Function

Let’s start.

1- Creating A Graphql Query With React

In this section we will create a graphql query with react. We will define the query that will bring the books in the BookList component. Of course we will need the module to perform these operations.

In the previous tutorial we installed apollo-boost packages and we also mentioned that we need apollo to use graphql with react. We will use the gql module in apollo-boost.

The gql module is located in apollo-boost and allows us to write a graphql query so we can write graphql queries with react and we create queries using apollo.

The queries we write using gql are exported using graphql module and sent to graphql server by ApolloProvider. It matches the appropriate query we created in graphq and returns us the information contained in the database so we can access the database with react.

Then let's create the query. First, import the gql module.

In BookList.js

//query for gql module
import {gql} from 'apollo-boost';



Let's create the query on this page to access books. We must use the query we use in GraphiQL to perform this operation.
graphql1.gif

//book list query
const getBooksQuery=gql `

{
  books{
     name
     type
     id
  }
}
`;



We've created a query called getBooksQuery that brings the books. In order for this query to work, we have to export this page when we export this page. To export this query we need to use graphql module.

We will import the graphql module.

In BookList.js

//for export
import {graphql} from 'react-apollo';



Let's use the getBooksQuery query using graphql at the time of BookList export.

//export graphql
export default  graphql(getBooksQuery) (BookList);



When the query is executed, the result of the query is passed to the props of the BookList component. Let's print the component's props on the console screen of the page to see the result of the query.

In BookList.js

class BookList extends Component{
    render(){
        console.log(this.props);
        …
}
   }



graphql2.gif

2- Using Cors Packages

In this section we will learn how to install cors packages.

We are currently unable to access the query result. Cors is an error that occurs when an application running on one origin runs on another and is controlled by the web browser. We can install the cors packages to solve this problem.
Cors packages can be used by in the graphql server. We can use cors using the app.use() function in the app.js file.

In app.js

//import cors
const cors=require('cors');

app.use(cors());



So that we solve the error and access the data in the database with react.
graphql3.gif

3-Create A Get Book Function

In this section, we will show the answer of the query that gets the books in the react application.

The information of the books from the mlab was contained in the props of the BookList component. We will access these books with the help of a function and use the function to perform the listing.

We will place this function in the BookList component.

In BookList.js

class BookList extends Component{
    getBooks(){
        
    }
…
}



If we define a function within a component, we must define it outside the render () function of the component. Then we can access this function with this keyword.

getBooks(){
  //We access the books with the data object.
  var datas=this.props.data;

  //if books are gets from mlab
  if(datas.loading){
     return (<div>Books Loading</div>)
  }
  //when getting books is finished
    else{
      return datas.books.map(book=>{
        return(
          <li key={book.id}>{book.name}</li>
     )
   })
  }
}



We pass the data object in props to the datas variable we created. Since it takes a long time to retrieve data from the mlab database, we can give a note to the end user in the standby state. datas.loading will be false when all data is loaded. We can see this note while the page loads.

graphql7.gif


We get a list of books, there will be more than one book. We put these books in the map () function so that we can process each one of them.

In the map function, we use the key attribute when using the li tag. Since the value of key should be different from other keys, we used the id value of the books.

We can use this function in the render() function to display the data.

In BookList.js

render(){
   console.log(this.props);
   return(
      <div>
        <ul id="book-list">
        {/* use getBooks function */}
           {this.getBooks()}
        </ul>
       </div>
     )
}



Thus, we use graphql query with react application and establish mlab connection.

graphql4.gif


We will add a new book using GraphiQL.

graphql5.gif


When we run the react application again, we see that it comes in the other book added.

graphql6.gif

Curriculum

Part 1 - Part 2 - Part 3 - Part 4 - Part 5 - Part 6

Proof of Work Done

https://github.com/pckurdu/Build-A-Library-Application-With-Graphql-ExpressJs-React-Apollo-and-MongoDB-Part-7

Sort:  

Thank you for your contribution @pckurdu.
After reviewing your tutorial we suggest the following points listed below:

  • Excellent work in the development of this tutorial. Thanks for following our suggestions in your tutorials. Your tutorials are very good.

Thank you for your work in developing this tutorial.
Looking forward to your upcoming tutorials.

Your contribution has been evaluated according to Utopian policies and guidelines, as well as a predefined set of questions pertaining to the category.

To view those questions and the relevant answers related to your post, click here.


Need help? Chat with us on Discord.

[utopian-moderator]

Thank you for your review, @portugalcoin! Keep up the good work!

Hi @pckurdu!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your post is eligible for our upvote, thanks to our collaboration with @utopian-io!
Feel free to join our @steem-ua Discord server

Hey, @pckurdu!

Thanks for contributing on Utopian.
We’re already looking forward to your next contribution!

Get higher incentives and support Utopian.io!
Simply set @utopian.pay as a 5% (or higher) payout beneficiary on your contribution post (via SteemPlus or Steeditor).

Want to chat? Join us on Discord https://discord.gg/h52nFrV.

Vote for Utopian Witness!