Abu vykdo efektus, bet skirtingais momentais, palyginti su naršyklės piešimu — ir tas laiko skirtumas yra visas tikslas.
Abu vykdo efektus, bet skirtingais momentais, palyginti su naršyklės piešimu — ir tas laiko skirtumas yra visas tikslas.
useEffect vykdomas po to, kai naršyklė jau nupiešė. Jis yra asinchroninis ir neblokavimas. Naudokite beveik viskam (duomenims, prenumeratomams, žurnalizavimui).useLayoutEffect vykdomas sinchroniškai po DOM pakeitimo, bet PRIEŠ naršyklę piešiant. Naudokite, kai turite perskaityti makietą ir pakeisti DOM tame pačiame kadre, kad išvengtumėte matomos mirksėjimo.render → DOM updated → [useLayoutEffect runs] → browser paints → [useEffect runs]
Įsivaizduokite išmatuojant elementą ir pakartotinai nustatant priemonės padėtį pagal jos dydį. Su useEffect, naudotojas trumpam pamatytų priemonę neteisinguose keliuose, tada ji šoktų:
useLayoutEffect(() => {
const { height } = ref.current.getBoundingClientRect();
setTooltipTop(-height); // applied BEFORE paint → no visible jump
}, []);
Su useEffect, tas pats kodas vykdomas po piešimo → vieno kadro mirksėjimas.
useLayoutEffect daro UI grubiu, nes naršyklė negali piešti, kol jis baigiasi.Nykščio taisyklė: pagal numatytuosius nustatymus useEffect; naudokite useLayoutEffect tik sinchroniškiems DOM matavimams/mutacijoms, kurie kitu atveju mirksėtų.
IT pokalbių klausimų biblioteka su išsamiais atsakymais — nuo Junior iki Senior.
Paaukoti