In React, what is the difference these useEffect?

  useEffect(() => {
    return () =>
      setTimeout(() => set_current_focus(index_map[comp_index]), 1000);
  }, [comp_index]);

and

  useEffect(() => {
    return setTimeout(() => set_current_focus(index_map[comp_index]), 1000);
  }, [comp_index]);

Based on my testing, there is no difference.

Can someone confirm?


Solution 1:

Both useEffect snippets are incorrect.

The value returned by the callback passed to useEffect should be a function used for cleaning up things (like clearing the timeout in your case).

So the correct usage looks like this:

useEffect(() => {
  const timeout = setTimeout(
    () => set_current_focus(index_map[comp_index]),
    1000
  );

  return () => clearTimeout(timeout);
}, [comp_index]);