DEV Community

Coder
Coder

Posted on

How to use the setTimeout in React Hooks

If you're working with React, you're probably familiar with using the setInterval function to run code at specific time intervals. However, what if you want to run a piece of code after a specific amount of time has elapsed? For this, you can use setTimeout.

In this article, we'll walk through how to use setTimeout in React Hooks, discuss why it's useful, and go through some examples.

What is setTimeout?

setTimeout is a JavaScript function that allows you to run a piece of code after a certain amount of time has elapsed. It takes two arguments: a function to run and the amount of time to wait before running the function. Here's an example:

setTimeout(() => {
  console.log('Hello, world!');
}, 1000);
Enter fullscreen mode Exit fullscreen mode

In this code, setTimeout is used to log "Hello, world!" to the console after a 1 second delay.

Why use setTimeout in React Hooks?

While setInterval is great for running code at specific intervals, there are times when you just need to run something once after a specific amount of time has elapsed. This is where setTimeout comes in handy.

For example, let's say you have a notification component that needs to disappear after 5 seconds. You could use setTimeout to start a timer when the component is mounted and remove the component after 5 seconds have elapsed.

How to use setTimeout in React Hooks

To use setTimeout in React Hooks, you'll need to use the useEffect hook. Here's an example:

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

function Notification({ text }) {
  const [show, setShow] = useState(true);

  useEffect(() => {
    const timer = setTimeout(() => {
      setShow(false);
    }, 5000);

    return () => {
      clearTimeout(timer);
    };
  }, []);

  return (
    <div style={{ display: show ? 'block' : 'none' }}>
      <p>{text}</p>
    </div>
  );
}

export default Notification;
Enter fullscreen mode Exit fullscreen mode

In this code, we have a Notification component that displays a piece of text for 5 seconds before disappearing. We use the useState hook to keep track of whether or not the component should be displayed, and we use the useEffect hook to set up a timer with setTimeout.

When the component mounts, useEffect sets up the timer with setTimeout. The return statement in useEffect cleans up the timer with clearTimeout when the component unmounts.

Examples of setTimeout in React Hooks

Let's walk through a few more examples of using setTimeout in React Hooks.

Example 1: Focus after delay

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

function Input() {
  const [value, setValue] = useState('');

  useEffect(() => {
    const timer = setTimeout(() => {
      document.querySelector('input').focus();
    }, 1000);

    return () => {
      clearTimeout(timer);
    };
  }, []);

  return (
    <div>
      <label htmlFor="input">Enter something:</label>
      <br />
      <input type="text" id="input" value={value} onChange={e => setValue(e.target.value)} />
    </div>
  );
}

export default Input;
Enter fullscreen mode Exit fullscreen mode

In this code, we have an Input component that sets focus to the input field after 1 second.

Example 2: Show and hide animation

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

function Animation() {
  const [visible, setVisible] = useState(true);

  useEffect(() => {
    const timer = setTimeout(() => {
      setVisible(false);
    }, 5000);

    return () => {
      clearTimeout(timer);
    };
  }, []);

  return (
    <div className={`animation ${visible ? 'visible' : ''}`}>
      <p>Here's some text that will disappear after 5 seconds</p>
    </div>
  );
}

export default Animation;
Enter fullscreen mode Exit fullscreen mode

In this code, we have an Animation component that displays some text and fades out after 5 seconds. We use CSS animations to create the fade-out effect.

Example 3: Alert message

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

function Alert({ message }) {
  const [show, setShow] = useState(true);

  useEffect(() => {
    const timer = setTimeout(() => {
      setShow(false);
    }, 5000);

    return () => {
      clearTimeout(timer);
    };
  }, []);

  return (
    <div className={`alert ${show ? 'show' : ''}`}>
      {message}
    </div>
  );
}

export default Alert;
Enter fullscreen mode Exit fullscreen mode

In this code, we have an Alert component that displays an alert message for 5 seconds before disappearing.

Conclusion

Using setTimeout in React Hooks is a great way to delay code execution and run code after a certain amount of time has elapsed. By using the useEffect hook, you can set up timers that work seamlessly with the React component lifecycle. Hopefully this guide has given you some ideas for how to use setTimeout in your own React projects!

Top comments (0)