Explain the difference between useEffect and useLayoutEffect.

useEffect runs asynchronously after the render, suitable for side effects like data fetching. useLayoutEffect runs synchronously after all DOM changes, used for DOM manipulations to avoid flicker.

useEffect(() => {
  console.log("Runs after render");
});

useLayoutEffect(() => {
  console.log("Runs before paint");
});