Mastering Hooks in React.js: A Step-by-Step Guide

Mastering Hooks in React.js: A Step-by-Step Guide

Welcome, codedamn developers! In today's blog post, we're going to delve into a vital aspect of React.js: Hooks. As we navigate through this guide, we will demystify this powerful feature, demonstrating how you can harness it to write cleaner and more efficient code.

Understanding Hooks

Before plunging into the depths of coding, let's first establish a clear understanding of what Hooks are. Introduced with React 16.8, Hooks are functions that allow you to "hook into" React state and lifecycle features from function components. They do not work inside classes — they let you use React without classes. (React documentation).

This feature is crucial as it allows you to use state and other React features without having to write a class. It heralds a significant shift in how you can write React components, making your code more readable and maintainable.

There are several types of Hooks, each serving a unique purpose. However, for the purpose of this guide, we'll focus primarily on the most frequently used ones: useState, useEffect, and useContext.


The useState Hook is a fundamental part of any functional component. It lets you add state to your function components, a feature that was previously exclusive to class components.

Let’s kickstart our discussion with a simple yet illustrative code example:

import React, { useState } from 'react'; function Counter() { const [count, setCount] = useState(0); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}> Click me </button> </div> ); } export default Counter;

In the code snippet above, useState is a Hook that allows us to add React state to our function component. We declare a state variable called count and set it to 0. React will remember this state between function calls.

The setCount function allows us to update the count when the button is clicked. Every time we click the button, setCount updates the state with a new count value, and the component re-renders with this new value.


The useEffect Hook, another staple in React development, enables you to perform side effects from a function component. It serves the same purpose as componentDidMount, componentDidUpdate, and componentWillUnmount in React classes, unifying them into a single API.

Let's illustrate this with a code example:

import React, { useState, useEffect } from 'react'; function Counter() { const [count, setCount] = useState(0); // Similar to componentDidMount and componentDidUpdate: useEffect(() => { // Update the document title using the browser API document.title = `You clicked ${count} times`; }); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}> Click me </button> </div> ); } export default Counter;

In this example, the useEffect Hook tells React that our component needs to perform an action after render. Specifically, we are updating the document title. The effect runs after every completed render, which is why we see the updated count in the title after incrementing it.


The useContext Hook is a hidden gem that enables you to easily access the Context API, a structure that enables you to share values between different components without passing props.

Here's an example:

import React, { useContext } from 'react'; import { ThemeContext } from './ThemeContext'; function ThemedButton() { const theme = useContext(ThemeContext); return ( <button style={{ background: theme.background, color: theme.foreground }}> I am styled by theme context! </button> ); } export default ThemedButton;

In the above example, the useContext Hook accepts a context object (the value returned from React.createContext) and returns the current context value, which is given by the nearest context provider for the given context.


Q: Can I use Hooks inside a class component?

No, Hooks are only for use inside function components or your own custom Hooks. They cannot be used in class components.

Q: Do I have to use Hooks in my new project?

While Hooks offer a new way to write components and can simplify your code, they're not mandatory. You can continue using class components if you prefer.

Q: Can I use Hooks with TypeScript?

Yes, Hooks are compatible with TypeScript. However, you need to be using TypeScript 3.3 or later to take advantage of this feature.

Q: What other Hooks are available to use?

Beyond useState, useEffect, and useContext, React also includes useReducer, useCallback, useMemo, useRef, useImperativeHandle, useLayoutEffect, and useDebugValue. Each of these Hooks serve unique purposes, adding to your toolkit of React skills.

To sum it up, React.js's Hooks are a potent feature that can greatly simplify your code. By understanding and mastering Hooks, you can write cleaner, more readable code and accelerate your React.js development. So, keep practicing, keep exploring, and enjoy the journey of becoming a Hooks master!

Become The Best React Developer 🚀
Codedamn is the best place to become a proficient developer. Get access to hunderes of practice React.js courses, labs, and become employable full-stack React web developer.

Free money-back guarantee

Unlimited access to all platform courses

100's of practice projects included

ChatGPT Based Instant AI Help (Jarvis)

Structured React.js/Next.js Full-Stack Roadmap To Get A Job

Exclusive community for events, workshops

Start Learning

Sharing is caring

Did you like what Mayank Sharma wrote? Thank them for their work by sharing it on social media.


No comments so far

Leave a question/feedback and someone will get back to you