# Introduction to Hooks in React

79

Technological change is rapidly impacting our present and our prospects for the future, and so are frontend frameworks, which are emerging at a very fast pace these days. And in many ways, React, the most popular framework amongst the JavaScript community, is turning out to be unstoppable.

Many of us have already played around with Hooks or have at least heard about them. But there are still many who are probably yet to take the time or have had the chance to experiment with them.  No worries, sooner or later you will find yourself diving into Hooks.

In this article, you will learn about the term, Hooks, and the reasons why you should use them in your future projects. Furthermore, you will learn about how you can use React Hooks in the best possible manner to build some awesome features in your projects and write cleaner code.

## What exactly is a Hook?

Hooks are just regular JavaScript functions. In layman terms, hooks provide a way to use functionalities such as context or state, which could earlier only be achieved through classes, and now can easily be done using function components.

React Hooks enable functional components to attach local state with it, and this state will be preserved by React when the component re-renders. Hence, this allows React to be used without classes.

While working with function components in React, we sometimes need to add state to it. In order to achieve that (to use setState() and states), we have to convert our function component into class one. With the help of Hooks, we can use the state in Function Components, without the use of classes.

## A practical view

There are two approaches to create a React component. One is using functions and the other is using classes. There is always a question in mind that “When do I use one v/s the other?”

Let us assume we have a simple class component and then we will convert it to a functional one with hooks and see the difference.

Component without Hook: Class Component

import React, { Component } from'react';
classGreetingextendsComponent {
state = {
text: ''”
}
handleChange= (e) => {
this.setState({ text: e.target.value })
}
render() {
return (
<input
value={this.state.text}
onChange={this.handleChange}
/>
)
}
}
exportdefaultGreeting; 

Components with Hook:Functional Component:

import React, { useState } from'react';
exportdefault () => {
const [text, setText] =useState('');
return (
<input
value={text}
onChange={(e) =>{ setText(e.target.value) }}
/>
);
}

• Lesser Code.
• Overall Optimized component
• Writing a Functional component with state
• Writing complex components became easier
• Handling events & logics in functional components.
• Performance boost up with Functional Components

If you disagree with any of the above, you can play with it in practice. I’m sure that would change your mind!

## Types of Hooks

Now, let us understand the power of hooks with some cool examples that will describe some basic Hooks which are:

• useState()
• useEffect()
• Custom Hooks (Building Your Own Hooks)

### State Hook

In React, we all are quite familiar with how the state is generally defined. If not, I’d recommend you to refresh your memory of State here.

this.state= {
name: Steve Marley
}; 

While state issimilar to props, we know that state is controlled by a component. Traditionally, state is generally defined by writing a class where “this.state” is used to initialize a class.

Let us take an example of class Component named (MyComponent):

classMyComponentextendsReact.component {
constructor(props)
super(props);
this.state= {
name: Steve Marley
}
} 

In class components, it isreally hard to reuse stateful logic between components and complex class components become hard to read and even harder to understand!!

React hooks help us to get rid of all that old-fashioned class stuff by making use of useState().

Now, this is important to note that in a functional component there is no concept of objects and objects being set as context (like we do in classes), so we can’t assign anything or read this.state. Instead, we call the useState Hook directly inside our functional component:

This will become something like this:

import{ useState } from'react'; // line 1
functionMyComponent() {
const [name, setName] =useState(‘Steve Marley');   // line 2
} 

Let us understand this code line by line:

In line1: there is a new method imported here called useState.

What is useState and how do we use it?

Well, useState is the React Hook that will allow us to access and manipulate state in our existing component. Therefore, in this approach, we do not have to extend our Component as we did in previous code.

And that’s it! It is worth noting that we are playing with states outside a class in the component directly as shown:

import{ useState } from'react';
function MyComponent() {
const [name, setName] =useState("Steve Marley");
return (<div>
<p>Heyyyyy!! {name}</p>
</div>)
}

### Deeper explanation

In class Component, we initialized the name state to 'Steve Marley' by setting this.state to { name: Steve Marley } in the constructor whereas in Functional componentthe only argument to the useState() Hook is the initial state.

Unlike with classes, the state does not have to be an object. We can keep a number or a string if that is all we need.

### What does useState return?

It returns two variables in the array [name, setName]

where “name” is the state variable and it could be anything, and setName is the function call (can be named anything), which updates the state by providing a new state.

If you are not familiar with the above syntax, please read array destructuring in JavaScript.

In our example we have declared a state variable called name and set it to Steve Marley. React will remember its current value between re-renders and provide the most recent one to our function. If we want to update the current name, we can call setName.

This is a way to “preserve” some values between the function calls so in other words useState is a new way to use the exact same capabilities that this.state provides in a class. Normally, variables “disappear” when the function exits but state variables are preserved by React.

It is worth noticing that now our component (functional component) looks pretty simple, crisp and it does not have the level of complexity that a class component normally has.

### Effect Hook

So far, we have seen extracting stateful logic with the help of hooks and defining/setting states inside a component. But what about managing the DOM from one component to another? Or fetching the data through an API? Or handling Events? All these operations which are quite familiar to usare effects!

The Effect Hook adds the ability to perform side effects from a functional component. It is a lifecycle Hook that combinescomponentDidMount, componentDidUpdate, and componentWillUnmount in React classes but unified them into a single API.

useEffect(() => {
}); 

By calling this hook, we are simply telling our component to perform some tasks after render like Data fetching, setting up a subscription, and manually changing the DOM in our React components.

Let us understand this with an example:

import React, { useState, useEffect } from"react";
exportdefaultfunctionGetData() {
const [myData, setData] =useState([]);
useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/todos/1")
.then(response=>response.json())
.then(myData=>setData(myData));
});
retu

### KnowledgeHut

Author

KnowledgeHut is an outcome-focused global ed-tech company. We help organizations and professionals unlock excellence through skills development. We offer training solutions under the people and process, data science, full-stack development, cybersecurity, future technologies and digital transformation verticals.
Website : https://www.knowledgehut.com

## What Is a React Component?

9253
What Is a React Component?

React is one of the most popular JavaScript libra... Read More

## An Introduction to Angular Components

Angular is an Open source and TypeScript-based modern framework which is usually used to develop Front end Single Page Applications (SPAs) and PWAs. Angular is the updated version of AngularJS by the same team at Google.  With respect to programming, there is a huge difference in both versions. AngularJS is commonly used with JavaScript whereas Angular is mostly used with TypeScript. This article helps you to summarize on how you can install Angular CLI on your Ubuntu platform and use it to create real-life Angular Applications / Projects. This blog will cover the process steps of Angular installation on the Ubuntu platform. By the end of the blog, you will learn about - Installing Node/npm package on Ubuntu Installation and Usage of Angular CLI globally Commands of Angular CLI Creating an initial workspace for the application Running the Angular application in BrowserPre-requisites You must be aware of the basics of web programming like HTML, CSS, and JavaScript. (otherwise we strongly recommend learning those first before getting into this). Also, this article assumes that you are familiar with terms like Node/NPM. Audience This document can be referred by anyone who wants to install latest Angular version on Ubuntu 16.04. In order to continue, you must have —  System requirementsUbuntu OS Machine Good Internet Connection Admin/Sudo access with installation privileges where you can install any packages freely. PS: While working with Angular, knowledge of TypeScript is good to have, but not mandatoryA brief note on Node.js We are required to install Node.js because it acts as a lightweight server to run Angular applications. (If already installed, skip this part and jump to the next part of this blog.) Node.js is again an open-source and cross-platform JavaScript run-time environment that allows to execute the JavaScript code outside of a browser (on the Server-side). Node.js is responsible for managing and installing all npm dependencies for your Angular application. It provides all the required libraries to run the Angular project. Node.js acts as a run-time environment for any Angular application with servers over localhost. For more information on Node.js refer the official docs. Any Angular application requires the latest/stable version of Node.js in order to continue. Go to the official website in order to learn more about how to install Node.js on your Ubuntu OS machine. There is more than one way to install Node.js on Ubuntu. You can install it via command line, via PPA (personal package archive), or via NVM (which is Node.js Version Manager) You can install any version current or latest stable version as per your need. In this blog, we learn how to install using Command-Line with the below given commands: curl -sL | sudo -E bash - here setup_12.x is the version, and this command will add the node resource repo into your Ubuntu OS. Now, let’s install Node.js using apt command, by running the below command —  \$ sudo apt install nodejs Once installed completely, you can verify that the Node.js and npm versions are installed by using the following command in a terminal/console window. — node -v or node — — version  npm -v 1. Need of NPM for Angular development Node.js serves as the Run-time environment for the application. Similarly, NPM(node package manager) is used as a dependency management tool for any JavaScript application. NPM will allow us to install the libraries required for any Angular application; for example, jQuery, angular-router, angular-http, bootstrap, and many more. You can explore a number of packages available in the npm store here. Note: Once you have installed Node.js it will automatically install NPM on your machine. You can check the version installed using the below command. npm -v 2. Angular CLI — What it is and the complete Installation guideIn the initial days of Angular, developers used to create whole architecture, webpack files, build process, etc for any project on their own from scratch, which is quite a time-consuming and lengthy process. To make it easier for the developer, the Angular team come up with an easy-to-use tool Angular CLI. As the name suggests CLI (command line interface), provides a user (developer) friendly interface where you can run commands to make your development life easier and faster. Angular CLI comes with a number of commands from creating a new project, to creating components, creating a routing configuration file, services, and many more.3. How to Install Angular CLI on Ubuntu To install the Angular CLI on your machine, open the terminal window and run the following command: npm install -g @angular/cli where -g denotes that CLI is being installed globally to your machine, which means you can create or run any command of CLI anywhere on your machine. Once you run the above command CLI will be installed on your machine, and you can verify the version installed using the following command: ng -vIn case you want to install some specific version of Angular CLI, you can run the below command —  npm install -g @angular/cli@x where x represents the Version number. You can change it to any valid version number. For more commands of Angular CLI, you can refer to this blog which contains a number of commands to use.4. Create Project using Angular CLI – Hello WORLD Moving on, let’s create our first ever Angular project using Angular CLI. Open your terminal window and type the command below on your machine. ng new hello-worldHere ng is our CLI prefix. new denotes the new project we are creating and hello-world is our project name. You can choose any name you want. After running this command, you will find the full architecture of the project in the directory where you run this command. The project folder will be like what is shown below -5. Angular Project architecture The first file to render on running this application will be index.html which is present in the src folder. src folder contains Source files for the root-level application project. assets folder contains all the static assets like images, fonts, etc. node_modules This folder is created while you run npm installed by package manager (npm) and it contains all the project dependencies or any third party modules required for the project. e2e folder contains all the source code related to Test Cases, and you can customize it as per your requirements. README.md file is being used as documentation for the app. Package.json configures npm dependencies that are available to the project in the workspace along with their versions specified. For more details about components/services and source code you can explore this link. Run the application You have completed the installation process of the Angular application via CLI, and now it’s time to run the application locally. As I said, Angular CLI comes with a complete tool-chain/commands for the development of front-end applications on your machine. Run the following command on the terminal (Navigate to the project directory if you are not in that directory) ng serve or ng serve --openThe --open (or just -o) option automatically opens your browser to  ng serve command will serve your application on localhost server which you can check by navigating to your browser with the below URL Once compiled successfully, your terminal window will look like below -You can customize the port as per your requirement by running the below command —  ng serve --host 0.0.0.0 --port 8080 Accessing Angular Web Interface ng serve command may take few seconds to run your application. Once completed, you should see a web page similar to the followingAnd it’s done! Now you can make changes in the default component’s template which is app.component.html  Also, moving forward you can generate a number of components/service/routing files using CLI commands as per your requirements and keep learning. 6. How to Uninstall Angular CLI on Ubuntu There are cases when you would need to uninstall Angular-CLI from your operating system. You can do so by running this below command on your terminal -  npm uninstall -g @angular/cli It's always recommended to run the command npm cache clean after uninstallation of Angular CLI from your system in order to avoid unwanted errors while installing it again. If you have any questions/doubts related to this blog, please let us know in the comment box below, and we would be more than happy to help you out.  If you have read this far, feel free to share this blog on social media or tweet about it.  Conclusion In this blog you have learned about what is Node/NPM and how you can install and use it. You have understood what is Angular CLI, and how you can use it after installing it on your Ubuntu Platform. Then we have created a new angular project from scratch using CLI command, and learnt how to run it. Now you have basic hands-on Angular application knowledge which you can use to start developing more applications.