Building HackerNews Api, React, React Testing Library, Axios & Memo

Building HackerNews Api, React, React Testing Library, Axios & Memo

In this post, We're going to be creating a small application in React that calls the Hackernews Api. We'll be looking at React memo, Axios (to make Api calls), styled components, and finally we will test our work using React Testing Library.

📝 React Tutorial - Hackernews Api - Axios, Memo, Styled Components, React Testing Library

This video is for people who have little understanding of React and Apis. We're going to be creating a small application in React that calls the Hackernews Api. We'll be looking at React memo, Axios (to make Api calls), styled components, and finally we will test our work using React Testing Library. Once we have done all this we will run our application through Lighthouse (a browser extension) that allows us to test for accessibility, performance and so much more. We will be making 500+ Api calls in this application (albeit this is automated), and I want to show you how to use memo with React so that we can avoid making multiple network calls if we already have the data.

A few notes: When testing HnApi, make sure you call the file HnApi.spec.js and not HnApi.js like I did :) In addition to this, make sure you call the StoriesContainer test file StoriesContainer.spec.js and not StoryContainer.spec.js like I did - we all make mistakes!

⏳ Timeline 0:00:00 - Introduction (what are we building?), tech stack talk 0:01:50 - Using create-react-app as our base 0:03:30 - Stripping out the files & content that we do not need 0:05:00 - Refactoring to named exports 0:08:35 - Modifying our .env file 0:09:15 - Scaffolding our application 0:10:15 - Looking at the Hackernews Api 0:11:50 - Looking at all the news article Ids 0:12:58 - Adding Axios using Yarn 0:13:00 - Creating our hnApi.js service file 0:15:07 - Adding the ability to get all story Ids from HN Api 0:17:14 - Starting work on App.js 0:22:30 - Adding useEffect to App.js to show all story Ids 0:30:00 - Explaining how useEffect works 0:36:00 - Creating our StoriesContainer.js container/component 0:37:50 - Adding the ability to get stories from HN Api 0:39:50 - Demonstrating the results that we receive from the HN Api 0:41:30 - Creating our Story.js component file 0:43:15 - Adding our Story component to the StoriesContainer component 0:44:10 - Adding storyId as a prop to the Story.js component 0:46:40 - Adding state to our Story.js component 0:47:10 - Using useEffect to get a story in our Story.js component 0:47:40 - Adding validation when getting stories 0:49:00 - Dumping our stories onto the page 0:49:55 - Building out the Story.js component with real data 0:53:20 - Adding a selector for the story fields 0:56:00 - Adding styled components 0:57:00 - Building out our StoryStyles.js file using styled components 0:59:00 - Adding a title to StoriesContainer.js 1:00:00 - Adding a StoryWrapper to our Story.js component 1:01:50 - More work on styling 1:02:30 - Adding styling for StoryMeta 1:03:55 - Adding styling for StoryMetaElements & styled component props 1:04:55 - Adding our styled components to our Story.js component 1:11:30 - Adding StoriesContainerStyles for more styling on the container 1:12:05 - Looking at adding global styles (createGlobalStyle) 1:13:00 - Adding our container styles to StoriesContainer.js 1:14:55 - Brief look at the React profiler 1:16:00 - Quick run through as to what we have built so far 1:18:10 - Making our time display properly using mapTime.js 1:22:00 - Adding InfiniteScroll to our application (custom hook) 1:22:40 - Constants to be used by InfiniteScroll for per page items 1:39:05 - Adding debounce functionality for scrolling 1:42:00 - Adding a fixture folder with fixtures for tests 1:46:00 - Testing! Lets test App.js 1:48:00 - Adding react-testing-library to our application 1:59:00 - Adding Jest coverage (good practise to do so) 2:02:00 - Testing the StoriesContainer.js 2:03:40 - Testing the Story.js component 2:10:00 - Testing the HnApi.js file 2:22:18 - Looking at our coverage and more testing! 2:22:53 - Collecting coverage from the right places 2:25:43 - Looking at React memo 2:27:33 - Adding memo to Story.js to prevent additional Api calls 2:29:18 - Overview of what we have achieved! 2:30:29 - Running our application through Lighthouse! 2:33:00 - Thanks for watching, I hope you learned a lot!

reactjs api

Bootstrap 5 Complete Course with Examples

Bootstrap 5 Tutorial - Bootstrap 5 Crash Course for Beginners

Nest.JS Tutorial for Beginners

Hello Vue 3: A First Look at Vue 3 and the Composition API

Building a simple Applications with Vue 3

Deno Crash Course: Explore Deno and Create a full REST API with Deno

How to Build a Real-time Chat App with Deno and WebSockets

Convert HTML to Markdown Online

HTML entity encoder decoder Online

Top 10 API Security Threats Every API Team Should Know

Learn what are the most important API security threats engineering leaders should be aware of and steps you can take to prevent them

What Are Good Traits That Make Great API Product Managers

What is API product management and what can you be doing to be a better API product manager — get aligned with SaaS and enterprise software requirements. This guide lays out what is API product management and some of the things you should be doing to be a good product manager.

Consume Web API Post method in ASP NET MVC | Calling Web API | Rest API Bangla Tutorial

LIKE | COMMENT | SHARE | SUBSCRIBE In this tutorial, I will discussed about how to consume Web API Get method and display records in the ASP.NET View. Here, ...

Consume Web API Get method in ASP NET MVC | Calling Web API | Rest API Bangla Tutorial

LIKE | COMMENT | SHARE | SUBSCRIBE In this tutorial, I will discussed about How to Consume Web API Get method in ASP NET MVC. Blog : http://aspdotnetexplorer...

Consume Web API Put method in ASP NET MVC | Calling Web API | Rest API Bangla Tutorial

LIKE | COMMENT | SHARE | SUBSCRIBE In this tutorial, we learned how to consume Web API Get and Post methods in the ASP.NET View. Here, we will see how to con...