How to Consume a RESTful API in React with Axios

In this tutorial, you need some knowledge of reacting, but you don't have to be an expert, just basic knowledge is enough to get started.

 

The objective is to get the app running, then we will style it. 

 

Let’s begin!

 

 

Create a directory for the react application

 

The frontend application directory can be accessed by navigating to it. 

 

 

It happens that we won't use a lot of files from the frontend directory when developing our react application. 

 

Public Folder

 

The index.html file is important here. You can remove all the other files.

 

Don't forget to remove the links to the manifest.json and logo files inside the index.html file. 

 

src Folder

In the src folder, you need to delete all but the index.js file. In the src folder, you need to create two new folders: components and CSS.

 

Create the following files inside the components folder.

 

App.jsx Notes.jsx and List.jsx in the CSS folder, and index.css in the components folder. 

 

Currently, the frontend directory should look like this:

 

 

index.js

 

As we won't be using the webvitals import or the webvitals function, remove them from the file.

 

Our App.jsx component's location has changed, so we must change the path to the App import to it.

 

 

CSS import and that of

 

 

The index.js file should look like this

 

 

The Axios JavaScript library will be needed to communicate with the API endpoints on the Django server backend.

 

To begin, we'll use npm to install it:

 

 

package.json

 

Next, open the package.json file and insert the proxy line below the "private": true, line, so it looks like this. 

 

 

You will be able to use relative paths when making API requests as a result of this.

 

Instead of using http://localhost:8000/notes/, you can simply use /notes/.

 

It appears to be a fantastic idea, doesn't it?

 

You'll get to see it in action soon. Let's get started on the component files. 

 

List.jsx

 

To begin, consider the List component.

 

We won't be doing much here for the time being; all we need to do is declare and export the function. 

 

 

Notes.jsx

 

We begin by importing the necessary hooks, useState, and useEffect. 

 

 

useState

 

Following that, we'll write the Note function, which will make use of the useState hook.

 

The state variable is declared as notes with an initial state of null in the first line. 

 

The second line handles the form data's state.

 

Here, we declare the state variable as formNote and set its initial state to empty strings.

 

 

Please keep in mind that every other function created below should be contained within the Note function above. 

 

useEffect

 

This useEffect hook will also make sure the getNotes function is called right after the render has been displayed.

 

 

You can pass an empty array ([]) as a second argument to prevent the function from running in an infinite loop.

 

Therefore, React doesn't need to rerun the effect because it doesn't depend on props or state.

 

GET API function

 

 

This request method type is getting, and the URL is the relative path /notes/.

 

In the package.json file, "http://localhost:8000" was not added.

 

The URL here has to be "http://localhost:8000/notes/".

 

The way we did it made the code cleaner. 

 

A GET request with Axios prompts the setNewNotes function to write the data in the response, and this updates the notes state variable with a new state.

 

This results in the value of the state variable changing from null to the data contained in the response. 

 

Lastly, a function is present to handle any errors that may occur during a get request.

 

POST API function

 

 

Bypassing /notes/ as the URL, we are declaring the request method type as POST.

 

Data is also part of our request.

 

The data will be sent to the backend for processing and storage in the database.

 

Inputs from the title and content fields will be sent to the backend for processing.

 

The response to the POST request with Axios is not processed we simply use it to query the getNotes function so that the previous notes will also be displayed with the new note. 

 

Then we use the setFormNote function to reset the form inputs to empty strings.

 

Also, we need to ensure that the form submission doesn't cause the page to reload, so we add the event.preventDefault function which prevents that from happening.

 

DELETE API function

 

 

In the function, we include the id parameter so we will be able to pass it as an argument, later on, to delete the particular note.

 

We don't process the response from the DELETE request when it's made with Axios; we just call the getNotes function using the response function so that the notes get method can get executed again and we'll be able to see the remaining notes. 

 

Form Input Change

This code ensures that the input is controlled, so we can handle the changes appropriately.

 

 

The function tracks all changes to the form inputs and updates/deletes them as needed.

 

You won't be able to see what you're typing in the form input fields if you don't use this function, and the values of your input data won't change. 

 

We change event.target to get the value and name, then we use the spread syntax to keep the previous input's value, and finally, we assign a new value to the specific input being operated on.

 

return

 

As the output of the Note function, we now return the React elements to be displayed. 

 

 

We include the input and text area elements in the form.

 

Then we add the onChange event handler, which calls the handleChange function whenever any of the input fields are changed. 

 

Then, before rendering the List component, we must first confirm that at least one single note was recovered from the database in order to avoid passing void data to the List component. 

 

 

If notes were successfully retrieved using the GET function, we pass the data's content (id, title, content) as well as the delete function to the List component.

 

Finally, remember to export the Note component so that it can be used in the App.jsx file. 

 

 

The Notes.jsx file should now look like this.

 

 

List.jsx

 

We must now return to the List.jsx file to complete the List component. 

 

 

We use props to access the data sent from the Note function, which gives us access to the note's title, content, and id.

 

We pass the id to an onClick function, which calls the delete function in the Note function with the argument id. 

 

Please keep in mind that if you directly pass the delete function into the onClick function, the delete function will run automatically and delete all of your notes.

 

The delete function could be passed into a function called by the onClick function, as we did above.

 

App.jsx

 

Let us now add the Note function to the App.jsx file.

 

 

Run the following commands to evaluate the application's current state:

 

 

then go back to the project1 directory where the manage.py file is located.

 

 

At last, we run:

 

 

Here is a screenshot of the fully functional application.

 

 

Styling

 

The final step in this tutorial is to style the Notes application so that it looks like this. 

 

 

Go back to the frontend directory.

 

 

Material UI icon

 

To obtain the + icon, you must first install the material UI icon. Run:

 

 

Notes.jsx

 

AddIcon from the installed material UI icon package is imported into the Notes component. 

 

 

We'll use useState hooks again to hide the text input and add button until the text area input is clicked.

 

 

Depending on the state, the first line shows or hides the text input and add button (false or true).

 

The state variable isExpanded is declared here with an initial value of false, so that the text input and add button are hidden when the page loads. 

 

The height of the text area input is determined by the second line.

 

The state variable is declared as rows with an initial state of 1.

 

 

Following that, we create a new function Noteshow that is called when the text area input is clicked. 

 

Let us also make the necessary adjustments to the form inputs.

 

 

As previously described, the isExpanded condition is added to the text input and button.

 

The NoteShow function is called when the textarea input is clicked, and two things happen.

 

1. With the argument 3, the setRows function is called.

 

which sets the rows attribute of the textarea input to 3, thereby increasing the textarea input's height.

 

2. With the argument true, the setExpanded function is called, which changes the state to true and then displays the hidden components.

 

Lastly, at the end of the createNote function, we include setExpanded(false).

 

 

As a result, when the form is submitted, the text input and button revert to their hidden states. 

 

This is the component Note.jsx in its final state.

 

 

Header.jsx

 

In the components folder, create a new Header.jsx component. This is where our header elements will be stored.

 

 

Footer.jsx

 

In the components folder, create a new component Footer.jsx to hold our footer elements.

 

 

In this case, we simply call the Date().getFullYear() method to obtain the current year and pass it to the p element in our footer. 

 

App.jsx

 

The Header and Footer components must be imported and called in the App.jsx file.

 

 

CSS

 

The CSS codes can be found in the GitHub repo; the classNames were already included while we were building the application. 

 

We have finished developing the Notes Application with CREATE, READ, and DELETE functionality.

 

You can now experiment and then have fun with your application.

 

To run it, do the following:

 

 

then go back to the project1 directory where the manage.py file is located.

 

 

Lastly, we run:

 

Work with world leading tech businesses

We connect high-performing software engineer talent in the Philippines with some of the world’s leading and most innovative Tech companies.

Submit CV

Author

Jake Hall
Chief Technology Officer
Work with world leading tech companies from the Philippines

Be up to date!

Sign up for our newsletters and get our latest outsourcing and tech news, and exclusive promotions.

If you’re interested to know more about our employee benefits and perks, you can download the booklet.

Download Now

Submit your CV today

One of our recruitment officers will get in touch with you!

    Our live jobs

    • Senior Front - End Developer - ANGULAR 6+

      Work with a leading UK company that works across multiple verticals within professional services globally, and has a skilled development team of 70 working remotely, operating across multiple continents. This is an outstanding opportunity for interested candidates to join a diverse team of experts, utilising some of the newest leading practises within frontend development.

    • Senior Full-Stack Ruby on Rails Developer

      A UK based award-winning Edutech platform business, working with Health & Social care organisations to ensure front line teams are fully trained and ready to help those in need. The company has seen an explosion of traction since Covid and their vision is to help save people’s lives.

    • Fullstack Wordpress & PHP Developer

      A brand development agency delivering high level growth with a multitude of companies across all levels, from corporates to SME's with globally known brands.

    • Ruby on Rails Developer

      As the sole developer in the team, you'll lead on all aspects and have a leading hand in shaping the future of the platform, working from back to front and playing a crucial part in the design, development and production of quality code. We're a close knit, remote working team and as such, you'll need to be self motivated and goal driven to keep everything moving at pace.

    • Senior PHP / Laravel Developer

      A leading UK company and is rapidly growing and recognised for their innovative service capabilities. With a legacy of many years at the forefront of the technology industry, they operate both nationally and internationally and place a premium on honesty, commitment and teamwork. With a solution strategically designed to support the ever-changing needs of service providers.

    • Wordpress Developer / SEO

      A leading UK digital marketing agency is looking for a highly skilled person to be their Wordpress Developer / SEO webmaster.

    • Senior Fullstack.Net Developer

      The company offers product and service stack presents end-to-end solutions for travel agents, tour operators, loyalty brands, hotels, conference destinations, OTAs and tourism organisations.

    • React JS Developer

      UK Company specialises in CRM memberships and subscription end clients.

    • Senior C++ Developer 14/17

      A UK leading institutional-grade exchange for trading asset-backed tokens (digital securities, security tokens, etc.).

    • React JS Developer

      A leading UK company well established in creating content apps and websites for their clients.

    How many hours do you want the developer to dedicate to working with you?

    What skillsets are you looking to hire?

    When do you need your developer to start ?