Denne siden inneholder en detaljert API-referanse for React component class-definisjonen. Det forutsetter at du er kjent med grunnleggende React-konsepter, For Eksempel Komponenter og Rekvisitter, Samt Tilstand og Livssyklus. Hvis ikke, les dem først.
Oversikt
React lar deg definere komponenter som klasser eller funksjoner. Komponenter definert som klasser for tiden gi flere funksjoner som er beskrevet i detalj på denne siden. For å definere En React-komponentklasse må du utvide React.Component
:
class Welcome extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; }}
den eneste metoden du må definere i enReact.Component
underklasse kallesrender()
. Alle de andre metodene som er beskrevet på denne siden er valgfrie.
Vi anbefaler sterkt at du ikke lager dine egne grunnkomponentklasser. I React-komponenter oppnås kodegjenbruk primært gjennom sammensetning i stedet for arv.
Merk:
React tvinger deg ikke til Å bruke ES6-klassesyntaksen. Hvis du foretrekker å unngå det, kan du bruke
create-react-class
modulen eller en lignende tilpasset abstraksjon i stedet. Ta en titt På Å Bruke React uten ES6 for å lære mer.
Komponentlivssyklusen
Hver komponent har flere «livssyklusmetoder» som du kan overstyre for å kjøre kode på bestemte tidspunkter i prosessen. Du kan bruke dette livssyklusdiagrammet som et jukseark. I listen nedenfor er vanlige livssyklusmetoder merket som fet. Resten av dem eksisterer for relativt sjeldne brukssaker.
Montering
disse metodene kalles i følgende rekkefølge når en forekomst av en komponent blir opprettet og satt inn I DOM:
constructor()
componentDidMount()
UNSAFE_componentWillMount()
static getDerivedStateFromProps()
getSnapshotBeforeUpdate()
componentWillUnmount()
setState()
- React-elementer. Vanligvis opprettet via JSX. For eksempel er
<div />
og<MyComponent />
React-elementer som instruerer React til å gjengi EN DOM-node eller en annen brukerdefinert komponent. - Matriser og fragmenter. La deg returnere flere elementer fra gjengi. Se dokumentasjonen på fragmenter for flere detaljer.
- Portaler. La deg gjøre barn til et annet DOM-subtre. Se dokumentasjonen på portaler for mer informasjon.
- Streng og tall. Disse gjengis som tekstnoder I DOM.
- Booleans eller
null
. Gjengi ingenting. (For det meste eksisterer for å støttereturn test && <Child />
mønster, dertest
er boolsk.) - Initialiserer lokal tilstand ved å tilordne et objekt til
this.state
. - Binding hendelsesbehandlingsmetoder til en forekomst.
- hvis du trenger å utføre en bivirkning (for eksempel datahenting eller en animasjon) som svar på en endring i rekvisitter, bruk
componentDidUpdate
livssyklus i stedet. - hvis du ønsker å re-beregne noen data bare når en rekvisitt endringer, bruke en memoization helper stedet.
- hvis du vil «tilbakestille» en tilstand når en prop endres, bør du vurdere å gjøre en komponent fullt kontrollert eller helt ukontrollert med en
key
i stedet.
static getDerivedStateFromProps()
render()
merk:
disse metodene anses som eldre, og du bør unngå dem i ny kode:
oppdatering
EN OPPDATERING kan skyldes endringer i rekvisitter eller tilstand. Disse metodene kalles i følgende rekkefølge når en komponent blir gjengitt:
shouldComponentUpdate()
render()
componentDidUpdate()
merk:
disse metodene anses som eldre, og du bør unngå dem i ny kode:
UNSAFE_componentWillUpdate()
UNSAFE_componentWillReceiveProps()
Demontering
denne metoden kalles når en komponent blir fjernet fra DOM:
feilhåndtering
disse metodene kalles når det oppstår en feil under gjengivelse, i en livssyklusmetode eller i konstruktøren av en hvilken som helst barnekomponent.
static getDerivedStateFromError()
componentDidCatch()
Andre Apier
Hver komponent gir også noen Andre Apier:
forceUpdate()
Klasseegenskaper
defaultProps
displayName
forekomst egenskaper
props
state
referanse
vanlige livssyklusmetoder
metodene i denne delen dekker de aller fleste av brukstilfeller vil du støte på å skape react-komponenter. For en visuell referanse, sjekk ut dette livssyklusdiagrammet.
render ()
render()
render()
metoden er den eneste nødvendige metoden i en klassekomponent.
når den kalles, bør den undersøke this.props
og this.state
og returnere en av følgende typer:
render()
– funksjonen skal være ren, noe som betyr at den ikke endrer komponentstatus, den returnerer det samme resultatet hver gang det blir påkalt, og det samhandler ikke direkte med nettleseren.
hvis du trenger å samhandle med nettleseren, utfør arbeidet ditt i componentDidMount()
eller de andre livssyklusmetodene i stedet. Å holde render()
pure gjør komponenter enklere å tenke på.
Merk
render()
vil ikke bli påberopt hvisshouldComponentUpdate()
returnerer usann.
constructor ()
constructor(props)
hvis du ikke initialiserer tilstand og du ikke binder metoder, trenger du ikke å implementere en konstruktør for Din React-komponent.
konstruktøren for En Reaksjonskomponent kalles før den monteres. Når du implementerer konstruktøren for en React.Component
underklasse, bør du ringe super(props)
før noen annen setning. Ellers vil this.props
være udefinert i konstruktøren, noe som kan føre til feil.
Vanligvis Brukes React-konstruktører Bare til to formål:
du bør ikke ringesetState()
i constructor()
. I stedet, hvis komponenten din trenger å bruke lokal tilstand, tilordne den opprinnelige tilstanden til this.state
direkte i konstruktøren:
constructor(props) { super(props); // Don't call this.setState() here! this.state = { counter: 0 }; this.handleClick = this.handleClick.bind(this);}
Konstruktør er det eneste stedet hvor du skal tilordnethis.state
direkte. I alle andre metoder må du bruke this.setState()
i stedet.
Unngå å innføre bivirkninger eller abonnementer i konstruktøren. For de brukstilfeller, bruk componentDidMount()
i stedet.
Merk
Unngå å kopiere rekvisitter til staten! Dette er en vanlig feil:
constructor(props) { super(props); // Don't do this! this.state = { color: props.color };}
problemet er at det er både unødvendig (du kan bruke
this.props.color
direkte i stedet), og skaper bugs (oppdateringer tilcolor
prop vil ikke bli reflektert i staten).bruk bare dette mønsteret hvis du med vilje vil ignorere prop-oppdateringer. I så fall er det fornuftig å omdøpe prop som skal kalles
initialColor
ellerdefaultColor
. Du kan deretter tvinge en komponent til å «tilbakestille» sin interne tilstand ved å endrekey
når det er nødvendig.Les vårt blogginnlegg om å unngå avledet tilstand for å lære om hva du skal gjøre hvis du tror du trenger noen stat til å stole på rekvisitter.
componentDidMount ()
componentDidMount()
componentDidMount()
startes umiddelbart etter at en komponent er montert (satt inn i treet). Initialisering som krever DOM noder bør gå her. Hvis du trenger å laste inn data fra et eksternt endepunkt, er dette et bra sted å starte nettverksforespørselen.
denne metoden er et godt sted å sette opp abonnementer. Hvis du gjør det, ikke glem å melde deg av i componentWillUnmount()
.
du kan ringe setState()
umiddelbart i componentDidMount()
. Det vil utløse en ekstra gjengivelse, men det vil skje før nettleseren oppdaterer skjermen. Dette garanterer at selv om render()
vil bli kalt to ganger i dette tilfellet, vil brukeren ikke se mellomstatusen. Bruk dette mønsteret med forsiktighet fordi det ofte fører til ytelsesproblemer. I de fleste tilfeller bør du kunne tilordne opprinnelig tilstand iconstructor()
i stedet. Det kan imidlertid være nødvendig for tilfeller som modaler og verktøytips når du må måle EN DOM-node før du gjengir noe som avhenger av størrelsen eller posisjonen.
componentDidUpdate ()
componentDidUpdate(prevProps, prevState, snapshot)
componentDidUpdate()
startes umiddelbart etter oppdatering. Denne metoden kalles ikke for den første gjengivelsen.
Bruk DETTE som en mulighet til å operere PÅ DOM når komponenten er oppdatert. Dette er også et bra sted å gjøre nettverksforespørsler så lenge du sammenligner gjeldende rekvisitter med tidligere rekvisitter (f. eks. en nettverksforespørsel kan ikke være nødvendig hvis rekvisitter ikke er endret).
componentDidUpdate(prevProps) { // Typical usage (don't forget to compare props): if (this.props.userID !== prevProps.userID) { this.fetchData(this.props.userID); }}
Du kan ringe setState()
umiddelbart i componentDidUpdate()
men merk at det må pakkes inn i en tilstand som i eksemplet ovenfor, eller du vil forårsake en uendelig sløyfe. Det vil også føre til en ekstra re-rendering som, mens ikke synlig for brukeren, kan påvirke komponentytelsen. Hvis du prøver å «speile» noen stat til en prop som kommer ovenfra, bør du vurdere å bruke prop direkte i stedet. Les mer om hvorfor kopiering rekvisitter til staten forårsaker feil.
hvis komponenten implementerergetSnapshotBeforeUpdate()
livssyklus (som er sjelden), vil verdien den returnerer sendes som en tredje «snapshot» parameter tilcomponentDidUpdate()
. Ellers vil denne parameteren være udefinert.
Merk
componentDidUpdate()
vil ikke bli påberopt hvisshouldComponentUpdate()
returnerer usann.
componentWillUnmount ()
componentWillUnmount()
componentWillUnmount()
startes umiddelbart før en komponent demonteres og ødelegges. Utfør all nødvendig opprydding i denne metoden, for eksempel ugyldiggjøre timere, avbryte nettverksforespørsler eller rydde opp eventuelle abonnementer som ble opprettet i componentDidMount()
.
du bør ikke ringe setState()
i componentWillUnmount()
fordi komponenten aldri vil bli gjengitt på nytt. Når en komponentforekomst er demontert, vil den aldri bli montert igjen.
Metoder For Sjeldent Brukte Livssykluser
metodene i denne delen tilsvarer uvanlige brukstilfeller. De er praktiske en gang i blant, men de fleste komponentene trenger sannsynligvis ikke noen av dem. Du kan se de fleste metodene nedenfor på dette livssyklusdiagrammet hvis du klikker på avkrysningsruten «Vis mindre vanlige livssykluser» øverst i det.
shouldComponentUpdate ()
shouldComponentUpdate(nextProps, nextState)
Bruk shouldComponentUpdate()
For Å la React vite om en komponents utgang ikke påvirkes av gjeldende endring i tilstand eller rekvisitter. Standard virkemåte er å re-gjengi på hver tilstand endring, og i de aller fleste tilfeller bør du stole på standard virkemåte.
shouldComponentUpdate()
påberopes før gjengivelse når nye rekvisitter eller tilstand mottas. Standardinnstillingene er true
. Denne metoden kalles ikke for den første gjengivelsen eller nårforceUpdate()
brukes.
denne metoden eksisterer bare som en ytelsesoptimalisering. Ikke stole på det for å «hindre» en gjengivelse, da dette kan føre til feil. Vurder å bruke den innebygde PureComponent
i stedet for å skrive shouldComponentUpdate()
for hånd. PureComponent
utfører en grunne sammenligning av rekvisitter og tilstand, og reduserer sjansen for at du hopper over en nødvendig oppdatering.
hvis du er sikker på at du vil skrive den for hånd, kan du sammenligne this.props
med nextProps
og this.state
med nextState
og returnere false
for å fortelle react kan oppdateringen hoppes over. Merk at retur false
forhindrer ikke at barnekomponenter gjengis på nytt når tilstanden endres.
vi anbefaler ikke å gjøre dype likestillingskontroller eller bruke JSON.stringify()
i shouldComponentUpdate()
. Det er svært ineffektivt og vil skade ytelsen.
for Øyeblikket, hvis shouldComponentUpdate()
returnerer false
, så UNSAFE_componentWillUpdate()
render()
og componentDidUpdate()
vil ikke bli påberopt. I fremtiden Kan React behandle shouldComponentUpdate()
som et hint i stedet for et strengt direktiv ,og returfalse
kan fortsatt resultere i en re-gjengivelse av komponenten.
statisk getDerivedStateFromProps ()
static getDerivedStateFromProps(props, state)
getDerivedStateFromProps
påberopes rett før du ringer til gjengivelsesmetoden, både på den første monteringen og på påfølgende oppdateringer. Det bør returnere et objekt for å oppdatere staten, eller null
for å oppdatere ingenting.
denne metoden finnes i sjeldne tilfeller der tilstanden avhenger av endringer i rekvisitter over tid. For eksempel kan det være nyttig å implementere en<Transition>
komponent som sammenligner sine tidligere og neste barn for å bestemme hvilken av dem som skal animere inn og ut.
Avledet tilstand fører til ordrik kode og gjør komponentene vanskelig å tenke på.Sørg for at du er kjent med enklere alternativer:
denne metoden har ikke tilgang til komponentforekomsten. Hvis du vil, kan du gjenbruke noen kode mellom getDerivedStateFromProps()
og de andre klassemetodene ved å trekke ut rene funksjoner av komponentrekvisitter og tilstand utenfor klassedefinisjonen.
Merk at denne metoden er avfyrt på hver gjengivelse, uavhengig av årsaken. Dette er i motsetning til UNSAFE_componentWillReceiveProps
, som bare brenner når foreldrene forårsaker en gjengivelse og ikke som følge av en lokal setState
.
getSnapshotBeforeUpdate ()
getSnapshotBeforeUpdate(prevProps, prevState)
getSnapshotBeforeUpdate()
påberopes rett før den sist gjengitte utgangen er forpliktet til F.EKS. DOM. Det gjør at komponenten din kan fange opp litt informasjon FRA DOM (f.eks. Enhver verdi som returneres av denne livssyklusen, sendes som en parameter til componentDidUpdate()
.
denne brukssaken er ikke vanlig, men det kan forekomme I UIs som en chat-tråd som må håndtere rulleposisjon på en spesiell måte.
en snapshot-verdi (eller null
) skal returneres.
For eksempel:
class ScrollingList extends React.Component { constructor(props) { super(props); this.listRef = React.createRef(); } getSnapshotBeforeUpdate(prevProps, prevState) { // Are we adding new items to the list? // Capture the scroll position so we can adjust scroll later. if (prevProps.list.length < this.props.list.length) { const list = this.listRef.current; return list.scrollHeight - list.scrollTop; } return null; } componentDidUpdate(prevProps, prevState, snapshot) { // If we have a snapshot value, we've just added new items. // Adjust scroll so these new items don't push the old ones out of view. // (snapshot here is the value returned from getSnapshotBeforeUpdate) if (snapshot !== null) { const list = this.listRef.current; list.scrollTop = list.scrollHeight - snapshot; } } render() { return ( <div ref={this.listRef}>{/* ...contents... */}</div> ); }}
i eksemplene ovenfor er det viktig å lesescrollHeight
egenskapen igetSnapshotBeforeUpdate
fordi det kan være forsinkelser mellom «gjengi» fase livssykluser (somrender
) og «forplikte» fase livssykluser (somgetSnapshotBeforeUpdate
ogcomponentDidUpdate
).
Feilgrenser
Feilgrenser er React-komponenter som fanger JavaScript-feil hvor som helst i det underordnede komponenttreet, logger disse feilene og viser et reservegrensesnitt i stedet for komponenttreet som krasjet. Feilgrenser fanger feil under gjengivelse, i livssyklusmetoder og i konstruktører av hele treet under dem.
en klassekomponent blir en feilgrense hvis den definerer enten (eller begge) av livssyklusmetodene static getDerivedStateFromError()
ellercomponentDidCatch()
. Oppdatere tilstand fra disse livssyklusene kan du fange Opp en ubehandlet JavaScript-feil i under treet og vise en reserve UI.
bruk bare feilgrenser for å gjenopprette fra uventede unntak; ikke prøv å bruke dem til kontrollflyt.
hvis Du vil ha mer informasjon, kan Du se Feilhåndtering I React 16.
Merk
Feilgrenser fanger bare feil i komponentene under dem i treet. En feilgrense kan ikke fange en feil i seg selv.
statisk getDerivedStateFromError ()
static getDerivedStateFromError(error)
denne livssyklusen startes etter at en feil har blitt kastet av en etterkommer component.It mottar feilen som ble kastet som en parameter, og skal returnere en verdi for å oppdatere tilstanden.
class ErrorBoundary extends React.Component { constructor(props) { super(props); this.state = { hasError: false }; } static getDerivedStateFromError(error) { // Update state so the next render will show the fallback UI. return { hasError: true }; } render() { if (this.state.hasError) { // You can render any custom fallback UI return <h1>Something went wrong.</h1>; } return this.props.children; }}
Merk
getDerivedStateFromError()
kalles under «gjengi» – fasen, så bivirkninger er ikke tillatt.For disse brukstilfellene, brukcomponentDidCatch()
i stedet.
componentDidCatch()
componentDidCatch(error, info)
denne livssyklusen startes etter at en feil har blitt kastet av en etterkommer component.It mottar to parametere:
-
error
– feilen som ble kastet. -
info
– et objekt med encomponentStack
– nøkkel som inneholder informasjon om hvilken komponent som kastet feilen.
componentDidCatch()
kalles under «commit» – fasen, så bivirkninger er permitted.It bør brukes til ting som logging feil:
class ErrorBoundary extends React.Component { constructor(props) { super(props); this.state = { hasError: false }; } static getDerivedStateFromError(error) { // Update state so the next render will show the fallback UI. return { hasError: true }; } componentDidCatch(error, info) { // Example "componentStack": // in ComponentThatThrows (created by App) // in ErrorBoundary (created by App) // in div (created by App) // in App logComponentStackToMyService(info.componentStack); } render() { if (this.state.hasError) { // You can render any custom fallback UI return <h1>Something went wrong.</h1>; } return this.props.children; }}
Produksjon og utvikling bygger Av React litt forskjellig i måtencomponentDidCatch()
håndterer feil.
ved utvikling vil feilene boble opp til window
, dette betyr at noen window.onerror
ellerwindow.addEventListener('error', callback)
vil fange opp feilene som har blitt fanget avcomponentDidCatch()
.
på produksjon, i stedet, feilene vil ikke boble opp, noe som betyr at noen stamfar feilbehandler vil bare motta feil ikke eksplisitt fanget av componentDidCatch()
.
Merk
i tilfelle en feil, kan du gjengi en reserve UI med
componentDidCatch()
ved å ringesetState
, men dette vil bli foreldet i en fremtidig utgivelse.Brukstatic getDerivedStateFromError()
for å håndtere reservegjengivelse i stedet.
Metoder For Eldre Livssyklus
metodene for eldre Livssyklus nedenfor er merket som «eldre». De jobber fortsatt, men vi anbefaler ikke å bruke dem i den nye koden. Du kan lære mer om å migrere bort fra eldre livssyklusmetoder i dette blogginnlegget.
UNSAFE_componentWillMount ()
UNSAFE_componentWillMount()
Merk
denne livssyklusen ble tidligere kalt
componentWillMount
. Det navnet vil fortsette å fungere til versjon 17. Brukrename-unsafe-lifecycles
codemod for å oppdatere komponentene automatisk.
UNSAFE_componentWillMount()
startes like før montering skjer. Det kalles førrender()
, derfor kallersetState()
synkront i denne metoden vil ikke utløse en ekstra gjengivelse. Generelt anbefaler vi at du bruker constructor()
i stedet for initialisering tilstand.
Unngå å innføre bivirkninger eller abonnementer i denne metoden. For de brukstilfeller, bruk componentDidMount()
i stedet.
dette er den eneste livssyklusmetoden som kalles server rendering.
UNSAFE_componentWillReceiveProps ()
UNSAFE_componentWillReceiveProps(nextProps)
Merk
denne livssyklusen ble tidligere kalt
componentWillReceiveProps
. Det navnet vil fortsette å fungere til versjon 17. Brukrename-unsafe-lifecycles
codemod for å oppdatere komponentene automatisk.
Merk:
Bruk av denne livssyklusmetoden fører ofte til feil og inkonsekvenser
- hvis du trenger å utføre en bivirkning (for eksempel datahenting eller animasjon) som svar på en endring i rekvisitter, bruk
componentDidUpdate
livssyklus i stedet.- hvis du brukte
componentWillReceiveProps
for å beregne noen data bare når en prop endres, bruk en memoization helper i stedet.- hvis du brukte
componentWillReceiveProps
til «reset» noen tilstand når en prop endringer, vurdere enten å gjøre en komponent fullt kontrollert eller helt ukontrollert med enkey
i stedet.for andre brukstilfeller, følg anbefalingene i dette blogginnlegget om avledet tilstand.
UNSAFE_componentWillReceiveProps()
startes før en montert komponent mottar nye rekvisitter. Hvis du trenger å oppdatere tilstanden som svar på prop-endringer (for eksempel for å tilbakestille den), kan du sammenligne this.props
og nextProps
og utføre tilstandsoverganger ved hjelp av this.setState()
i denne metoden.
Merk at hvis en overordnet komponent får komponenten til å gjengi på nytt, kalles denne metoden selv om rekvisitter ikke er endret. Sørg for å sammenligne gjeldende og neste verdier hvis du bare vil håndtere endringer.
React kaller ikkeUNSAFE_componentWillReceiveProps()
med innledende rekvisitter under montering. Det kaller bare denne metoden hvis noen av komponentens rekvisitter kan oppdatere. Å ringethis.setState()
utløser vanligvis ikke UNSAFE_componentWillReceiveProps()
.
UNSAFE_componentWillUpdate ()
UNSAFE_componentWillUpdate(nextProps, nextState)
Merk
denne livssyklusen ble tidligere kalt
componentWillUpdate
. Det navnet vil fortsette å fungere til versjon 17. Brukrename-unsafe-lifecycles
codemod for å oppdatere komponentene automatisk.
UNSAFE_componentWillUpdate()
påberopes like før gjengivelse når nye rekvisitter eller tilstand mottas. Bruk dette som en mulighet til å utføre forberedelse før en oppdatering oppstår. Denne metoden kalles ikke for den første gjengivelsen.
Merk at du ikke kan ringethis.setState()
her; du bør heller ikke gjøre noe annet (f.eks. sende En Redux-handling) som vil utløse en oppdatering til En React-komponent førUNSAFE_componentWillUpdate()
returnerer.
Vanligvis kan denne metoden erstattes av componentDidUpdate()
. For å lagre en rulleposisjon), kan du flytte den logikken til getSnapshotBeforeUpdate()
.
Merk
UNSAFE_componentWillUpdate()
vil ikke bli påberopt hvisshouldComponentUpdate()
returnerer usann.
Andre Apier
I Motsetning til livssyklusmetodene ovenfor (Som Reagerer på deg), er metodene nedenfor metodene du kan ringe fra komponentene dine.
Det er bare to av dem: setState()
og forceUpdate()
.
setState ()
setState(updater, )
setState()
enqueues endrer komponenttilstanden og forteller React at denne komponenten og dens barn må gjengis på nytt med den oppdaterte tilstanden. Dette er den primære metoden du bruker til å oppdatere brukergrensesnittet som svar på hendelsesbehandlere og serverrespons.
Tenk på setState()
som en forespørsel i stedet for en umiddelbar kommando for å oppdatere komponenten. For bedre oppfattet ytelse Kan React forsinke det, og deretter oppdatere flere komponenter i et enkelt pass. React garanterer ikke at tilstandsendringene blir brukt umiddelbart.
setState()
oppdaterer ikke komponenten umiddelbart. Det kan batch eller utsette oppdateringen til senere. Dette gjør lesing this.state
rett etter å ha ringt setState()
en potensiell fallgruve. I stedet bruker componentDidUpdate
eller en setState
tilbakeringing (setState(updater, callback)
), som enten er garantert å skyte etter at oppdateringen er brukt. Hvis du må angi tilstanden basert på forrige tilstand, les om argumentetupdater
nedenfor.
setState()
vil alltid føre til en gjengivelse med mindre shouldComponentUpdate()
returnerer false
. Hvis foranderlige objekter blir brukt og betinget gjengivelseslogikk ikke kan implementeres i shouldComponentUpdate()
, vil kall setState()
bare når den nye tilstanden er forskjellig fra forrige tilstand, unngå unødvendige gjengivelser.
det første argumentet er en updater
funksjon med signaturen:
(state, props) => stateChange
state
er en referanse til komponenttilstanden når endringen blir brukt. Det bør ikke være direkte mutert. I stedet bør endringer representeres ved å bygge et nytt objekt basert på input fra state
og props
. Anta for eksempel at vi ønsket å øke en verdi i staten ved props.step
:
this.setState((state, props) => { return {counter: state.counter + props.step};});
state
ogprops
mottatt av oppdateringsfunksjonen er garantert oppdatert. Utdataene fra oppdatereren slås sammen medstate
.
den andre parameteren til setState()
er en valgfri tilbakeringingsfunksjon som vil bli utført når setState
er fullført og komponenten gjengis på nytt. Generelt anbefaler vi at du bruker componentDidUpdate()
for slik logikk i stedet.
du kan eventuelt sende et objekt som det første argumentet til setState()
i stedet for en funksjon:
setState(stateChange)
Dette utfører en grunne sammenslåing avstateChange
til den nye tilstanden, for eksempel for å justere en handlekurv varemengde:
this.setState({quantity: 2})
denne formen for setState()
er også asynkron, og flere samtaler i samme syklus kan settes sammen. Hvis du for eksempel prøver å øke et vareantall mer enn en gang i samme syklus, vil det resultere i tilsvarende:
Object.assign( previousState, {quantity: state.quantity + 1}, {quantity: state.quantity + 1}, ...)
Etterfølgende anrop overstyrer verdier fra tidligere anrop i samme syklus, slik at antallet bare økes en gang. Hvis neste tilstand avhenger av gjeldende tilstand, anbefaler vi at du bruker oppdateringsfunksjonsskjemaet, i stedet:
this.setState((state) => { return {quantity: state.quantity + 1};});
for flere detaljer, se:
- Tilstand og Livssyklusguide
- i dybden: når og hvorfor er
setState()
samtaler batchet? - i dybden: Hvorfor oppdateres ikke
this.state
umiddelbart?
forceupdate ()
component.forceUpdate(callback)
når komponentens tilstand eller rekvisitter endres, vil komponenten din gjengis på nytt. Hvis render()
– metoden avhenger av noen andre data, kan Du fortelle React at komponenten trenger re-rendering ved å ringe forceUpdate()
.
Kall forceUpdate()
vil føre til render()
å bli kalt på komponenten, hoppershouldComponentUpdate()
. Dette vil utløse de normale livssyklusmetodene for barnekomponenter, inkludertshouldComponentUpdate()
– metoden for hvert barn. React vil fortsatt bare oppdatere DOM hvis markeringen endres.
Normalt bør du prøve å unngå all bruk av forceUpdate()
og bare lese fra this.props
og this.state
i render()
.
Class Properties
defaultProps
defaultProps
kan defineres som en egenskap på komponentklassen selv, for å angi standard rekvisitter for klassen. This is used for undefined
props, but not for null
props. For example:
class CustomButton extends React.Component { // ...}CustomButton.defaultProps = { color: 'blue'};
If props.color
is not provided, it will be set by default to 'blue'
:
render() { return <CustomButton /> ; // props.color will be set to blue }
If props.color
is set to null
, it will remain null
:
render() { return <CustomButton color={null} /> ; // props.color will remain null }
displayName
The displayName
string is used in debugging messages. Vanligvis trenger du ikke å angi det eksplisitt fordi det er utledet fra navnet på funksjonen eller klassen som definerer komponenten. Du vil kanskje angi det eksplisitt hvis du vil vise et annet navn for feilsøkingsformål, eller når du oppretter en høyere ordens komponent, kan du se Bryte Visningsnavnet For Enkel Feilsøking for detaljer.
Instansegenskaper
rekvisitter
this.props
inneholder rekvisitter som ble definert av den som ringer denne komponenten. Se Komponenter og Rekvisitter for en introduksjon til rekvisitter.
spesielt this.props.children
er en spesiell prop, vanligvis definert av underordnede koder I jsx-uttrykket i stedet for i selve taggen.
tilstand
tilstanden inneholder data som er spesifikke for denne komponenten, som kan endres over tid. Staten er brukerdefinert, og det bør være et vanlig JavaScript-objekt.
hvis noen verdi ikke brukes til gjengivelse eller dataflyt (for eksempel en timer-ID), trenger du ikke å sette den i tilstanden. Slike verdier kan defineres som felt på komponentforekomsten.
Se Tilstand og Livssyklus for mer informasjon om tilstanden.
mutere aldri this.state
direkte, som ringer setState()
etterpå kan erstatte mutasjonen du har gjort. Behandle this.state
som om det var uforanderlig.