Open In App

How do you use multiple useEffect in a component?

useEffect is a hook used to perform side effects in function components. If you need to use multiple useEffect hooks in a single component, you can simply place them one after the other within your component function.

Key Points for Using Multiple useEffect Hooks:

Example: Below is an example of using multiple useEffect in a component. The Timer component utilizes two useEffect hooks: one manages a timer based on the isActive state, while the other triggers an alert at 10 seconds, each with their specific dependencies, alongside functions to control the timer.




import React, {
    useState,
    useEffect
} from 'react';
 
function Timer() {
    const [seconds, setSeconds] = useState(0);
    const [isActive, setIsActive] = useState(false);
 
    useEffect(() => {
        console.log("Timer isActive changed:", isActive);
        let intervalId;
        if (isActive) {
            intervalId = setInterval(() => {
                setSeconds((prevSeconds) =>
                    prevSeconds + 1);
            }, 1000);
        }
 
        return () => {
            console.log("Timer cleanup, isActive:",
                isActive);
            clearInterval(intervalId);
        };
    }, [isActive]);
 
    useEffect(() => {
        console.log("Timer seconds changed:",
            seconds);
        if (seconds >= 10) {
            alert('Timer reached 10 seconds!');
            setIsActive(false);
        }
    }, [seconds]);
 
    const startTimer = () => {
        setIsActive(true);
    };
 
    const stopTimer = () => {
        setIsActive(false);
    };
 
    const resetTimer = () => {
        setSeconds(0);
        setIsActive(false);
    };
 
    return (
        <div>
            <h2>Timer: {seconds} seconds</h2>
            <button onClick={startTimer}>Start</button>
            <button onClick={stopTimer}>Stop</button>
            <button onClick={resetTimer}>Reset</button>
        </div>
    );
}
 
export default Timer;

Output:

Output


Article Tags :