Renderöintivaihe ja DOM:n commit
Seuratkaa Reactin renderöintisykliä JSX:n arvioinnista yhteensovittamisen kautta selaimen piirtoon
Renderöintivaihe ja DOM:n commit on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu React Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. React Academy-kurssilla on yhteensä 4 oppituntia.
Reactin työskentelysyklin yleiskatsaus
Reactin työskentelysyklissä on kaksi päävaihetta: renderöintivaihe ja commit-vaihe. Renderöintivaiheen aikana React kutsuu komponenttifunktioita ja muodostaa käyttöliittymästä virtuaalisen esityksen (Fiber-puun). Commit-vaiheen aikana React toteuttaa Fiber-puussa olevat muutokset oikeassa DOM-puussa.
Renderöintivaihe voidaan keskeyttää
React 18 Concurrent Mode -tilassa renderöintivaihe voidaan keskeyttää, pysäyttää tai aloittaa uudelleen. React saattaa kutsua komponenttifunktiota useita kertoja ennen yhdenkään muutoksen viemistä käyttöön. Siksi komponenttifunktioiden on oltava puhtaita: niillä ei saa olla sivuvaikutuksia, koska funktio voi suorittua useammin kuin kerran yhtä näkyvää päivitystä kohti.
Commit-vaihe on aina synkroninen
Toisin kuin renderöintivaihe, commit-vaihe on aina synkroninen ja suoritetaan loppuun asti. Reactia ei voi keskeyttää DOM-muutosten käyttöönoton aikana. Näin DOM ei koskaan jää osittain päivitettyyn tilaan. Käyttäjä näkee jokaisen commit-vaiheen jälkeen aina täysin yhtenäisen käyttöliittymän.
Commit-vaiheen kolme alavaihetta
Commit-vaiheessa on kolme alavaihetta: ennen muutosta (luokkakomponentin getSnapshotBeforeUpdate suoritetaan tässä, jotta DOM-arvot voidaan lukea ennen muutoksia), muutos (React lisää, päivittää ja poistaa DOM-solmuja) ja asettelu (synkroniset efektit suoritetaan tässä, erityisesti useLayoutEffect sekä luokkakomponentin componentDidMount/componentDidUpdate).
Passiiviset efektit: useEffect
useEffect on passiivinen efekti, mikä tarkoittaa, ettei sitä suoriteta commit-vaiheen aikana. Kun commit-vaihe on valmis ja selain on piirtänyt näkymän, React ajoittaa passiiviset efektit suoritettaviksi asynkronisesti. Ne suoritetaan sen jälkeen, kun selain on saanut tilaisuuden näyttää päivitetyn DOMin näytöllä.
Selaimen piirtämisen ajoitus
useLayoutEffect suoritetaan) ja passiivisten efektien vaiheen (jossa useEffect suoritetaan) välissä. Tämä on olennainen ajoitusero: useLayoutEffect suoritetaan ennen piirtämistä ja useEffect sen jälkeen. Ero on erittäin tärkeä efekteille, jotka muuttavat visuaalista tulosta.
Miksi useEffect voi aiheuttaa kaksi visuaalista päivitystä
Jos useEffect lukee DOMia ja päivittää tilaa (esimerkiksi mittaa elementin ja asettaa koon tilamuuttujaan), React renderöi ja ottaa muutokset käyttöön uudelleen. Selain piirtää näkymän kahdesti: ensin alkuperäisellä koolla ja sitten korjatulla koolla. Käyttäjä saattaa nähdä hetken väärän koon, ennen kuin korjaus tulee näkyviin.
Fiber-puu
React rakentaa sisäisesti puun "fiber"-solmuja, yhden kutakin komponentti-instanssia kohden. Jokainen fiber sisältää komponentin tilan, efektit ja tulosteen. Renderöintivaiheen aikana React luo uuden työn alla olevan fiber-puun. Commit-vaiheen aikana työn alla olevasta puusta tulee nykyinen puu, ja vanha puu kierrätetään.
Kaksoiskutsu Strict Modessa
React Strict Mode kutsuu kehitystilassa tarkoituksella komponenttifunktioita ja efektejä kahdesti sivuvaikutusten havaitsemisen helpottamiseksi. Sekä useLayoutEffect että useEffect mountataan, unmountataan ja mountataan uudelleen. Tätä kaksoiskutsua ei tapahdu tuotannossa. Sen tarkoitus on tuoda esiin virheet, joissa efektien siivousta ei tehdä asianmukaisesti.
Miksi komponenttifunktioiden on oltava puhtaita
Koska renderöintivaihe voidaan keskeyttää ja suorittaa uudelleen, komponenttifunktioiden on tuotettava samoilla syötteillä sama tulos ilman sivuvaikutuksia. Funktion rungossa tehdyt mutaatiot, tilaukset ja API-kutsut (efektien ulkopuolella) suoritetaan Concurrent Modessa odotettua useammin, mikä johtaa virheisiin.
DOM:n lukeminen renderöinnissä ja efekteissä
Älä koskaan lue DOM-ominaisuuksia suoraan komponenttifunktion rungossa. DOM ei ehkä vielä ole olemassa (palvelinrenderöinnissä), tai se voi olla vanhentunut (uudelleenrenderöinneissä). Lue DOM aina useLayoutEffect-efektin sisällä (ennen piirtämistä tehtäviä lukuja varten) tai useEffect-efektin sisällä (piirtämisen jälkeen tehtäviä lukuja varten), jolloin DOM:n ajantasaisuus on taattu.
Reactin commit-vaiheen alavaiheet
Missä Reactin commit-vaiheen alavaiheessa useLayoutEffect suoritetaan?
Oppitunnin kertaus: renderöintivaihe ja DOM-commit
Reactin renderöintivaihe rakentaa fiber-puun ja voidaan keskeyttää; commit-vaihe ottaa DOM-muutokset käyttöön ja on aina synkroninen. Commit-vaiheessa on kolme alavaihetta: ennen mutaatiota, mutaatio ja layout. useLayoutEffect suoritetaan layout-vaiheessa ennen selaimen piirtämistä. useEffect suoritetaan passiivisena efektinä piirtämisen jälkeen.
Opi React tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 88
- Oppitunnit
- 324
Usein kysytyt kysymykset
Onko oppitunti ”Renderöintivaihe ja DOM:n commit” ilmainen?
Kyllä – oppitunnin ”Renderöintivaihe ja DOM:n commit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko React Academy-kurssin, päivitä CoddyKit PROhon. React Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Renderöintivaihe ja DOM:n commit”?
Seuratkaa Reactin renderöintisykliä JSX:n arvioinnista yhteensovittamisen kautta selaimen piirtoon Harjoittelet React Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni React Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin React Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Renderöintivaihe ja DOM:n commit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä React Academy-oppitunnilla?
Kyllä. Jokainen React Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Renderöintivaihe ja DOM:n commit
- Milloin useLayoutEffect suoritetaan verrattuna useEffectiin
- DOM-elementtien mittaaminen useLayoutEffectillä
- Layoutin thrash-ilmiön ja visuaalisen välkkymisen välttäminen