Introduction to Hooks in React

React is a popular JavaScript library for building user interfaces. It offers a component-based architecture, allowing developers to build reusable and modular UI elements. With the introduction of React Hooks in version 16.8, managing state and side-effects in functional components became easier and more intuitive.

What are Hooks?

Hooks are functions provided by the React library that allow us to use state and other React features without writing a class. Previously, state management and lifecycle methods were only available in class components. However, Hooks allow us to access these valuable features in functional components as well, simplifying the development process and making the code more readable.

There are several built-in hooks available in React, such as useState, useEffect, useContext, and many more. These hooks enable developers to leverage powerful features and encapsulate logic within individual components, rather than spreading it across multiple classes.

useState Hook

The useState hook is one of the most commonly used hooks in React. It allows functional components to have state variables, similar to how state is managed in class components. The useState hook takes an initial value as a parameter and returns an array with the current state value and a function to update it.

Here's an example that demonstrates the usage of useState:

import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
      <button onClick={() => setCount(count - 1)}>Decrement</button>

In the above code snippet, we initialize the count state to 0 using useState(0). We then have access to the count variable within the component's function body. When the buttons are clicked, the setCount function updates the state value accordingly, triggering a re-render of the component.

useEffect Hook

The useEffect hook allows us to perform side-effects in functional components. Side-effects can include fetching data from an API, subscribing to external services, or manually manipulating the DOM. The useEffect hook takes in two parameters: a callback function and an array of dependencies.

Here's an example that demonstrates the usage of useEffect:

import React, { useState, useEffect } from 'react';

function DataFetcher() {
  const [data, setData] = useState(null);

  useEffect(() => {
    // Fetch data from API
      .then((response) => response.json())
      .then((data) => setData(data));
  }, []); // Empty dependency array ensures the effect is only run once

  return (
      {data ? (
          { => (
            <li key={}>{}</li>
      ) : (
        <p>Loading data...</p>

In the above code snippet, the useEffect hook is used to fetch data from an API when the component mounts. The dependency array is left empty [] to ensure the effect is only run once. Once the data is fetched, the state is updated using the setData function, triggering a re-render of the component.


React Hooks bring a new level of simplicity and flexibility to functional components. They allow for better code organization, easier state management, and more readable components. With the ability to use hooks, developers can build complex applications without the need for class components, making React development more approachable and enjoyable.

noob to master © copyleft