React.Component — klassecomponenten en hoe ze werken

Auteur: IT Sectr Gepubliceerd: 2026-07-04 Leestijd: 9 min

React.Component — de basisklasse voor het maken van componenten met overerving in React. Vóór de komst van hooks in versie 16.8 waren klassecomponenten de enige manier om status en levenscyclus te beheren. Volgens React, 2024 worden klassecomponenten nog steeds ondersteund, hoewel functionele componenten met hooks worden aanbevolen voor nieuwe projecten.

Belangrijkste punten

  • React.Component — de basisklasse waarvan klassecomponenten erven via extends Component.
  • Status wordt beheerd via this.state en alleen bijgewerkt via this.setState — directe mutatie is verboden.
  • Levenscyclus omvat de methoden componentDidMount, componentDidUpdate en componentWillUnmount.
  • this in klassemethoden vereist contextbinding — via bind, pijlfuncties of class fields.
  • Migratie naar functionele componenten is geleidelijk mogelijk: hooks en klassen kunnen in hetzelfde project samen bestaan.

Wat is React.Component?

React.Component — een abstracte klasse die ingebouwde methoden biedt voor het werken met status, props en de levenscyclus van de component. Om een klassecomponent te maken, moet u een klasse definiëren die overerft van React.Component en de render-methode implementeren.

React.Component verscheen in de allereerste versie van React (2013) en bleef de belangrijkste manier om componenten te maken gedurende vijf jaar. Het React-ecosysteem is rond klassen opgebouwd: componenten van hogere orde (HOC), render props, context — al deze patronen zijn via klassensyntaxis geïmplementeerd.

Met de release van React 16.8 in 2019 introduceerde het React-team hooks als alternatief voor klassen. Hooks losten dezelfde taken op — status, effecten, context — maar zonder overerving en complexe contextbinding. React.Component blijft volledig ondersteund, maar voor nieuwe projecten wordt de functionele benadering aanbevolen.

Een klassecomponent maken

Een minimale klassecomponent — een klasse met slechts één render-methode die een React-element retourneert. render — de enige verplichte methode. Het moet een pure functie zijn van this.props en this.state: dezelfde set props en status geeft hetzelfde resultaat.

js
import React, { Component } from 'react';

class Welcome extends Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

Constructor en initialisatie van status

De constructor wordt uitgevoerd vóór het monteren. Daarin wordt super(props) aangeroepen om props door te geven aan de ouderklasse en wordt this.state geïnitialiseerd. De constructor voor andere doeleinden gebruiken — abonnementen, API-aanroepen — wordt niet aanbevolen: daarvoor is componentDidMount.

js
class Counter extends Component {
  constructor(props) {
    super(props);
    this.state = { count: 0 };
  }

  render() {
    return <p>Count: {this.state.count}</p>;
  }
}

Statusbeheer via this.state en this.setState

this.state — het object dat de gegevens van de component bevat. Het direct wijzigen (this.state.count = 1) is verboden — het veroorzaakt geen herrendering en verbreekt de voorspelbaarheid. De status moet worden bijgewerkt via this.setState, die een nieuw statusobject maakt en een herrendering start.

setState kan een object of een functie ontvangen. De functionele vorm heeft de voorkeur wanneer de nieuwe status afhankelijk is van de vorige: this.setState(prev => ({ count: prev.count + 1 })). React kan meerdere setState-aanroepen groeperen in één batch voor prestatieoptimalisatie.

js
class Toggle extends Component {
  constructor(props) {
    super(props);
    this.state = { isOn: false };
  }

  handleClick() {
    this.setState(prev => ({ isOn: !prev.isOn }));
  }

  render() {
    return (
      <button onClick={() => this.handleClick()}>
        {this.state.isOn ? 'ON' : 'OFF'}
      </button>
    );
  }
}

Een belangrijke eigenschap van setState — het is asynchroon. Na het aanroepen van setState wordt de status niet onmiddellijk bijgewerkt. Als u een actie moet uitvoeren na de update, geef dan een callback als tweede argument: this.setState(newState, () => console.log(this.state)).

Levenscyclusmethoden

Klassencomponenten hebben vooraf gedefinieerde methoden die React op specifieke momenten aanroept. Monteren — constructor → render → componentDidMount. Bijwerken — render → componentDidUpdate. Demonteren — componentWillUnmount.

MethodeFaseDoel
constructorMonterenInitialisatie van state en binding van methoden
renderElke keerTeruggeven van React-elementen (verplicht)
componentDidMountNa monterenAPI-verzoeken, abonnementen, timers
componentDidUpdateNa bijwerkenReageren op verandering van props/status
componentWillUnmountVoor verwijderingOpschonen van abonnementen, timers, uitschrijven voor gebeurtenissen

ComponentDidMount — gegevens ophalen

componentDidMount — de belangrijkste plek voor neveneffecten na de eerste render. Hier worden HTTP-verzoeken uitgevoerd, WebSocket-verbindingen tot stand gebracht en timers gestart. Als u het abonnement niet opschoont in componentWillUnmount, treedt er een geheugenlek op.

js
class UserProfile extends Component {
  componentDidMount() {
    fetch(`/api/users/${this.props.userId}`)
      .then(res => res.json())
      .then(data => this.setState({ user: data }));
  }

  componentWillUnmount() {
    // Verzoek annuleren bij demontage
  }

  render() {
    return <div>{this.state.user?.name}</div>;
  }
}

This-context binding in methoden

In JavaScript zijn klassemethoden standaard niet gebonden aan de instantie. Als u een methode als callback doorgeeft — aan een gebeurtenishandler, timer — zal this undefined zijn (in strict mode) of window (zonder strict mode). Zonder binding zal this.setState een fout geven.

Er zijn drie manieren van binding: bind in de constructor, pijlfunctie in de callback en class field met pijlfunctie. De eerste manier is de officiële aanbeveling van React: bind één keer in de constructor, zonder de functie bij elke render opnieuw te maken.

js
// Methode 1: bind in constructor (aanbevolen)
class MyComponent extends Component {
  constructor(props) {
    super(props);
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.setState({ clicked: true });
  }

  render() {
    return <button onClick={this.handleClick}>Click</button>;
  }
}

Class field — moderne syntaxis met automatische binding. De pijlfunctie in de klasseeigenschap vangt this uit het zichtbaarheidsbereik van de constructor. Nadeel — de methode wordt op elke instantie gemaakt, niet op het prototype, wat het geheugen verhoogt voor honderden componenten van hetzelfde type.

Vergelijking van klasse- en functionele componenten

De keuze tussen klasse en functie — is niet alleen een kwestie van syntaxis. Functionele componenten met hooks lossen problemen op die inherent zijn aan klassen: duplicatie van logica in verschillende levenscyclusmethoden (componentDidMount + componentDidUpdate), complexiteit met this en het onvermogen om gerelateerde logica te extraheren in een herbruikbaar blok.

Functionele componenten zijn gemakkelijker te testen — ze hebben geen interne status (die vóór hooks alleen in klassen was) en vereisen geen montage in de DOM voor het controleren van callbacks. React beveelt functionele componenten aan voor alle nieuwe projecten, documentatie en voorbeelden worden ermee geschreven.

Klassencomponenten blijven de beste keuze bij het werken met verouderde code. Als het project vóór 2019 is gestart, bevat het waarschijnlijk duizenden klassecomponenten. Ze allemaal herschrijven naar hooks in één sprint is riskant. React garandeert achterwaartse compatibiliteit: klassecomponenten zullen niet worden verwijderd.

Migratiestrategie van klassen naar hooks

Geleidelijke migratie begint met analyse van de component. Eenvoudige componenten zonder status (stateless) worden als eerste vertaald — ze worden eenvoudig vervangen door functies. Daarna — componenten met één of twee statusvelden, waar useState direct this.state en this.setState vervangt.

Complexe componenten met meerdere levenscyclusmethoden worden vertaald via useEffect. Logica uit componentDidMount + componentDidUpdate wordt verdeeld over afzonderlijke useEffects met verschillende afhankelijkheden. componentWillUnmount wordt vervangen door een retourfunctie binnen useEffect. Gebruik useReducer voor complexe statuslogica.

Automatische migratietools — @phenomnomnominal/ts-react-class-to-hook of codemod-scripts — kunnen eenvoudige klassen automatisch converteren. Voor complexe gevallen blijft migratie handwerk dat inzicht vereist in de logica van de oorspronkelijke component.

Veelgestelde vragen

Is het aanroepen van super(props) in de constructor verplicht?

Ja. super(props) geeft props door aan de bovenliggende React.Component. Zonder deze aanroep zal this.props undefined zijn binnen de constructor. In render en levenscyclusmethoden zijn props zelfs zonder super beschikbaar, maar dit is een bijwerking van de implementatie.

Waarom is setState asynchroon?

React groepeert meerdere setState-aanroepen in één batch om het aantal onnodige herrenderingen te verminderen. Als setState synchroon was, zou elke aanroep onmiddellijk renderen veroorzaken, wat de prestaties bij massale updates zou verlagen.

Kunnen hooks worden gebruikt binnen een klassecomponent?

Nee. Hooks werken alleen in functionele componenten. Voor projecten met klassecomponenten zijn alle oude patronen beschikbaar: render props, HOC en Consumer voor context. Migratie naar hooks vereist transformatie van de klasse naar een functie.

Wat is PureComponent en wat is het verschil met Component?

React.PureComponent implementeert shouldComponentUpdate met een ondiepe (shallow) vergelijking van props en status. In tegenstelling tot Component, die altijd herrendert bij setState, slaat PureComponent de herrendering over als de gegevens niet zijn gewijzigd. Dit is een optimalisatie voor componenten zonder complexe nesting.

Hoe wordt een fout afgehandeld in een klassecomponent?

Gebruik componentDidCatch en getDerivedStateFromError. componentDidCatch(error, info) logt de fout. getDerivedStateFromError werkt de status bij voor het weergeven van fallback-UI. Deze methoden werken alleen in klassecomponenten — functies hebben een ErrorBoundary-wrappercomponent nodig.

Samenvatting

  • React.Component — de basisklasse voor componenten met overerving, status en levenscyclusmethoden.
  • this.state wordt geïnitialiseerd in de constructor, alleen bijgewerkt via this.setState — directe mutatie is verboden.
  • componentDidMount — de belangrijkste plek voor API-verzoeken, abonnementen en timers na de eerste render.
  • componentWillUnmount — verplicht opschonen van abonnementen en timers om geheugenlekken te voorkomen.
  • This-binding is verplicht: bind in de constructor — de aanbevolen manier voor callback-methoden.
  • Hooks hebben klassecomponenten vervangen voor nieuwe projecten, maar klassen blijven volledig ondersteund.
  • Migratie naar hooks wordt geleidelijk uitgevoerd: stateless componenten eerst, complexe — via useReducer en useEffect.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook