Hook, Line, and Sinker: My Journey with React Hooks

Table of contents

No heading

No headings in the article.

When I first heard about React Hooks, I'll admit, I was a bit skeptical. I had always been a class component kind of developer and the idea of using state in functional components seemed a bit foreign to me. But then, I decided to take the plunge and give them a try, and let me tell you, I was hooked (pun intended).

First things first, what are React Hooks? In a nutshell, they're a way to use state and other React features in functional components, rather than having to use class components. Prior to the introduction of hooks, the only way to use state in a functional component was through props and stateless components. But with hooks, you can easily add state to your functional components and update it as needed.

The most commonly used hook is the useState hook, which allows you to add state to a functional component. For example, let's say you have a simple counter component and you want to keep track of the number of clicks. With useState, you can do that like so:

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>
  );
}

In this example, we're using the useState hook to create a state variable called "count" and set its initial value to 0. We're also using the setCount function to update the state when the button is clicked. And just like that, we have a working counter component with state, all thanks to the useState hook.

Another hook that's worth mentioning is the useEffect hook. This hook allows you to run side effects (like fetching data or setting up a subscription) in your functional components. It's similar to the componentDidMount and componentDidUpdate lifecycle methods in class components. For example, let's say you have a component that fetches data from an API when it's rendered. With useEffect, you can do that like so:

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

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

  useEffect(() => {
    fetch('https://my-api.com/data')
      .then(response => response.json())
      .then(data => setData(data))
  }, []);

  return (
    <div>
      {data ? <p>{data}</p> : <p>Loading...</p>}
    </div>
  );
}

In this example, we're using the useEffect hook to fetch data from an API when the component is rendered. We're also passing an empty array as the second argument to useEffect to make sure that the effect only runs once (when the component is first rendered).

There are many other hooks that React provides, such as useContext, useReducer, useMemo, and useCallback, each with their own unique functionality. But the useState and useEffect hooks are the most commonly used and a great place to start for beginners.