The key timing difference is paint. useLayoutEffect blocks paint until its setup and any synchronous updates finish.