Hooks in React

Hooks in React

16 Jun 2025
Intermediate
4.31K Views
12 min read
Learn with an interactive course and practical hands-on labs

Free React JS Online Course with Certificate - Start Today

Hooks in React are built-in functions that allow you to use features like state, lifecycle methods, and side effects inside functional components. Before hooks, these features were only available in class components. Hooks in React are important because they simplify your code, make it easier to read, and help you reuse logic without changing component structure. Today, Hooks in React are widely used in modern applications to build clean, efficient, and well-structured components.

In the React tutorial, we will learn how to use Hooks in React to manage state, handle side effects, and simplify component logic using functional components.

What are hooks in React?

React Hooks are operations that let you leverage React capabilities in functional components, like state and lifecycle methods. These features were formerly restricted to class components and Hooks. Hooks were first made available in React 16.8, & thanks to their ease of use and capacity to simplify code, they have grown in popularity swiftly.

Benefits of using React Hooks

Benefits of using React Hooks in your development process include:

  • Simpler Code: Hooks allow you to write cleaner and shorter code using functional components instead of classes.
  • Reusability: You can easily reuse logic across components by creating custom hooks.
  • Better Readability: Functional components with hooks are easier to read and understand.
  • No Need for 'this' Keyword: Hooks remove the confusion of using this, which is common in class components.
  • Improved Component Structure: Hooks help break complex components into smaller, more manageable parts.
  • Easier Testing: Functional components with hooks are easier to test than class components.
  • Modern React Practice: Hooks represent the latest and recommended way to write React code.

Read More - Top 50 React Interview Questions & Answers

Understanding the different types of hooks in React

React Hooks come in various flavors, each of which has a distinct function. The most common types of hooks in React are listed below:

  1. State Hooks (useState): Add and update state in functional components easily without using classes.
  2. Effect Hooks (useEffect): Handle side effects like data fetching, DOM updates, or subscriptions after render.
  3. Context Hooks (useContext): Access and share context data across components without passing props manually.
  4. Custom Hooks: Create reusable logic by combining built-in hooks for cleaner and modular code.

Using State Hooks

One of the most often employed react hooks is the state hook. Your functional components can gain state through their use, which increases their potency and dynamic range. Let's look at state hooks and how to use them.

You must import the useState Hook from the React library to use state hooks. The useState Hook can then be used to declare a state variable and its initial value.

Here's an example:

import React, { useState } from 'react';
 const Counter = () => {
  // Declare a state variable called "count" and initialize it to 0
  const [count, setCount] = useState(0);
  // Function to handle incrementing the count

  const incrementCount = () => {
  setCount(count + 1);
  };
  return (
   <div>
    <h2>Counter: {count}</h2>
    <button onClick={incrementCount}>Increment</button>
   </div>
  );
 };
 
 export default Counter;

In this example, we declare a state variable called count and initialize it to 0 using React's useState Hook. With the help of the setCount function, the incrementCount function updates the count by one. The component displays a count and a button that, when pressed, calls incrementCount, updating the component with the new count value.

Without the need for class components, you may manage and modify the state within the functional components using state React hooks.

Working with Effect Hooks

React Hooks also have powerful Effect Hooks. They enable you to carry out outside operations in your functional components, including data fetching or event subscription. Let's look at how effect hooks are used in React. You must import the useEffect Hook from the React library to use effect Hooks. The useEffect Hook can then be used to declare an effect function within your component.

Here's an example:

import React, { useState, useEffect } from 'react';
 const ExampleComponent = () => {
  const [data, setData] = useState(null);
  useEffect(() => {
   // Fetch data from an API endpoint
   fetch('https://api.example.com/data')
   .then(response => response.json())
   .then(data => {
   // Update the state with the fetched data
   setData(data);
   });
  }, []); // Empty dependency array ensures the effect runs only once on component mount
  return (
   div>
    {data ? (
     ul>
      {data.map(item => (
       likey={item.id}>{item.name}li>
      ))}
     ul>
    ) : (
     p>Loading data...p>
    )}
   div>
  );
 };
 
 
 export default ExampleComponent;

We import the useState & useEffect hooks from React in this example. Using useState, we declare the data state variable inside ExampleComponent. When the component mounts, useEffect retrieves information from an API endpoint. The state is updated by the fetched data, which results in a new render to show the data or a loading notification. You may handle side effects in React in a declarative and succinct manner without the use of lifecycle methods in class components by using effect Hooks.

Read More - React developer salary in India

How to use Context Hooks

Context Hooks give your functional components a mechanism to consume the React context. You can transfer data between components using context rather than explicitly passing props at each level. Let's examine context hook usage in React.

You must import the useContext Hook from the React library to use context hooks. The useContext Hook in your component will then allow you to access the context value. Here's an example:

import React, { createContext, useContext } from 'react';
 // Create a context
 const MyContext = createContext();
 // Create a component that uses the context
 const ChildComponent = () => {
  // Access the context value using useContext
  const value = useContext(MyContext);
  return <p>Context value: {value}</p>;
 };
 // Create a parent component that provides the context value
 const ParentComponent = () => {
  const contextValue = 'Hello, Context!';
  return (
   <MyContext.Provider value={contextValue}>
   <ChildComponent />
   </MyContext.Provider>
  );
 };
 
 
 export default ParentComponent;

In this particular example, we use createContext to create a context. We create a ChildComponent that uses useContext to obtain the context value and show it. Using MyContext.Provider, the ParentComponent covers the ChildComponent and supplies the context value. When ParentComponent is displayed, ChildComponent receives the context value and shows it.

You don't need context consumers or providers when using context React hooks to quickly consume context information within your functional components.

Custom Hooks

React Hooks' powerful feature called Custom Hooks. They let you quickly share reusable functionality across several components by encapsulating it in a unique Hook. Let's investigate the creation and application of custom React Hooks. Simply specify a function that calls one or more already existing Hooks to create a custom Hook.

Here is an example of a custom Hook that fetches data from an API:

import { useState, useEffect } from 'react';
 const useApiData = (url) => {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);
  useEffect(() => {
   const fetchData = async () => {
    try {
     const response = await fetch(url);
     const jsonData = await response.json();
     setData(jsonData);
     setLoading(false);
    } catch (error) {
     setError(error);
     setLoading(false);
    }
   };
   fetchData();
  }, [url]);
  return { data, loading, error };
 };
 
 
 export default useApiData;

The useApiData custom hook, which accepts a url parameter, is created in this example. Inside, useState establishes variables for data, loading, and errors. When the URL changes, useEffect causes data to be fetched. While errors update error and loading, success changes data and loading. The Hook gives back an object that contains data, loading, and component usage errors.

You may abstract away complicated logic into reusable Hooks by using custom Hooks in React, which makes your code more modular & maintainable.

Hook rule in react

The hook rule in React refers to the standards established by the React team for using hooks properly. Functional components can access React capabilities like state and lifecycle methods thanks to hooks. The rule stipulates that hooks must never be used in loops or conditional code, only at the top level of a functional component. To gain a comprehensive understanding of React hooks and how to apply them effectively, consider enrolling in a React Online Course for practical insights and hands-on experience.

React Hooks vs Class Components

Comparing Class Components and React Hooks

  • Elimination of class components: The use of hooks does away with the demand for verbose, intricate class components. They offer a simpler and more logical method of handling state and side effects, which makes code easier to comprehend.
  • Reusability and modularity: By enabling the construction of customized Hooks that encapsulate logic and can be shared across many components, Hooks encourage the reuse of code. This makes code maintenance and organization easier.
  • Performance benefit: Hooks streamline re-renders by updating only the components that truly require it. Providing improved rendering control, results in noticeable speed advantages, particularly in bigger applications.

Examples of using React Hooks in real-world scenarios

React Hooks can improve your React development workflow in a variety of situations. Here are a few examples of real-world applications for hooks:

  • Form validation: You may incorporate form validation logic in your React forms by using hooks. State Hooks can be used to control form inputs and the status of their validation, while Effect Hooks can be used to run validation checks and modify error messages.
  • Authentication: In your React applications, you can handle authentication using hooks. State hooks can be used to control the user's authentication status, and effect hooks can be used to carry out login and logout procedures and update the UI as necessary.
  • Data fetching: In your React applications, hooks can be used to fetch data from APIs. You may manipulate the fetched information as well as the loading/error states via state hooks and effect hooks, respectively.

These are just a few examples of when Hooks have been used in the real world. Hooks are a fantastic tool for enhancing your React development productivity because of their simplicity and flexibility.

Best practices for using React Hooks

Even though React Hooks offer a great deal of flexibility and power, there are a few recommended practices to follow when utilizing them in React apps. Here are some pointers to assist you in writing clear and enduring code:

  • Always use hooks at the top level: Don’t call hooks inside loops, conditions, or nested functions.
  • Use multiple useEffect hooks for different effects: Keep each effect focused and separate.
  • Name custom hooks with 'use' prefix: Example: useAuth, useFetch for better readability and React detection.
  • Keep component logic reusable with custom hooks: Extract shared logic into custom hooks for cleaner code.
  • Use useState for simple state and useReducer for complex state: Choose based on your state management needs.
  • Avoid unnecessary state updates: Update state only when needed to avoid extra re-renders.
  • Use dependencies array correctly in useEffect: Always include the right dependencies to avoid bugs or infinite loops.
  • Keep hooks clean and minimal: Avoid putting too much logic inside a single hook.
Conclusion

In conclusion, Hooks in React have changed the way we build components by bringing powerful features like state and side effects to functional components. They make the code cleaner, more reusable, and easier to maintain. By learning and using Hooks in React, you can write modern, efficient, and scalable React applications. Mastering hooks is essential for any React developer working with today's best practices.

FAQs

In React, hooks are the functions that help developers to use state and other React features in functional components.

The 4 primary hooks in React are as follows:
  1. useState
  2. useEffect
  3. useContext
  4. useReducer

With the help of React Hooks, the functional components in React can easily use state and other React features without the need for class components which promotes reusability.

Take our React skill challenge to evaluate yourself!

In less than 5 minutes, with our skill challenge, you can identify your knowledge gaps and strengths in a given skill.

GET FREE CHALLENGE

Share Article
About Author
Shailendra Chauhan (Microsoft MVP, Founder & CEO at ScholarHat)

Shailendra Chauhan, Founder and CEO of ScholarHat by DotNetTricks, is a renowned expert in System Design, Software Architecture, Azure Cloud, .NET, Angular, React, Node.js, Microservices, DevOps, and Cross-Platform Mobile App Development. His skill set extends into emerging fields like Data Science, Python, Azure AI/ML, and Generative AI, making him a well-rounded expert who bridges traditional development frameworks with cutting-edge advancements. Recognized as a Microsoft Most Valuable Professional (MVP) for an impressive 9 consecutive years (2016–2024), he has consistently demonstrated excellence in delivering impactful solutions and inspiring learners.

Shailendra’s unique, hands-on training programs and bestselling books have empowered thousands of professionals to excel in their careers and crack tough interviews. A visionary leader, he continues to revolutionize technology education with his innovative approach.
Live Training - Book Free Demo
ASP.NET Core Certification Training
05 Jul
10:00AM - 12:00PM IST
Checkmark Icon
Get Job-Ready
Certification
Advanced Full-Stack .NET Developer with Gen AI Certification Training
05 Jul
10:00AM - 12:00PM IST
Checkmark Icon
Get Job-Ready
Certification
.NET Solution Architect Certification Training
06 Jul
08:30PM - 10:30PM IST
Checkmark Icon
Get Job-Ready
Certification
.NET Microservices Certification Training
06 Jul
08:30PM - 10:30PM IST
Checkmark Icon
Get Job-Ready
Certification
React Certification Training
12 Jul
07:00AM - 09:00AM IST
Checkmark Icon
Get Job-Ready
Certification
Accept cookies & close this