Zote zinakimbia athari, lakini kwa wakati tofauti unaohusiana na randevu ya kivinjari — na tofauti hiyo ya wakati ndio kitu chote.
Zote zinakimbia athari, lakini kwa wakati tofauti unaohusiana na randevu ya kivinjari — na tofauti hiyo ya wakati ndio kitu chote.
useEffect inaendesha baada ya kivinjari kupiga hesabu. Ni ya asynchronous na isiyozuia. Itumie kwa karibu kila kitu (data, subscriptions, kuandika kumbukumbu).useLayoutEffect inaendesha kwa wakati mmoja baada ya DOM kugeuzwa lakini KABLA ya kivinjari kupiga hesabu. Itumie wakati lazima kusoma weka na kubadilisha DOM katika fremu sawa ili kuepuka kung'ang'ana kinachoonekana.render → DOM updated → [useLayoutEffect runs] → browser paints → [useEffect runs]
Imagine kupima kipengele na kuorodhesha upya kidokezo kinachotokana na ukubwa wake. Kwa useEffect, mtumiaji angebaki na fupi kuona kidokezo mahali pasipo sahihi, kisha inakufa:
useLayoutEffect(() => {
const { height } = ref.current.getBoundingClientRect();
setTooltipTop(-height); // applied BEFORE paint → no visible jump
}, []);
Kwa useEffect, nambari sawa inaendesha baada ya randevu → kung'ang'ana moja la fremu.
useLayoutEffect inasababisha UI kuhisi vibaya, kwa sababu kivinjari hakiwezi kupiga hesabu hadi itakamilika.Kanuni ya kidole: chaguo msingi la useEffect; tumia tu useLayoutEffect kwa maamuzi ya DOM ya uwiano/mabadiliko ambayo vinginevyo vingeleza.
Maktaba ya maswali ya mahojiano ya IT yenye majibu ya kina — kutoka Junior hadi Senior.
Changia