Component est la classe de base pour les composants React définis à l’aide de classes JavaScript. Les composants à base de classes restent pris en charge par React, mais nous les déconseillons pour tout nouveau code.
class Greeting extends Component {
render() {
return <h1>Salut {this.props.name} !</h1>;
}
}- Référence
Componentcontextpropsrefsstateconstructor(props)componentDidCatch(error, info)componentDidMount()componentDidUpdate(prevProps, prevState, snapshot?)componentWillMount()componentWillReceiveProps(nextProps)componentWillUpdate(nextProps, nextState)componentWillUnmount()forceUpdate(callback?)getChildContext()getSnapshotBeforeUpdate(prevProps, prevState)render()setState(nextState, callback?)shouldComponentUpdate(nextProps, nextState, nextContext)UNSAFE_componentWillMount()UNSAFE_componentWillReceiveProps(nextProps, nextContext)UNSAFE_componentWillUpdate(nextProps, nextState)static childContextTypesstatic contextTypesstatic contextTypestatic defaultPropsstatic propTypesstatic getDerivedStateFromError(error)static getDerivedStateFromProps(props, state)
- Utilisation
- Alternatives
Référence
Component
Pour définir un composant React sous forme de classe, étendez la classe Component fournie par React et définissez sa méthode render :
import { Component } from 'react';
class Greeting extends Component {
render() {
return <h1>Salut {this.props.name} !</h1>;
}
}Seule la méthode render est requise, les autres méthodes sont optionnelles.
Voir d’autres exemples ci-dessous.
context
Le contexte d’un composant à base de classe est mis à disposition dans this.context. Il n’est disponible que si vous précisez quel contexte vous souhaitez récupérer en utilisant static contextType (approche plus récente) ou static contextTypes (approche dépréciée).
Un composant à base de classe ne peut lire qu’un contexte à la fois.
class Button extends Component {
static contextType = ThemeContext;
render() {
const theme = this.context;
const className = 'button-' + theme;
return (
<button className={className}>
{this.props.children}
</button>
);
}
}props
Les props passées à un composant à base de classe sont mises à disposition dans this.props.
class Greeting extends Component {
render() {
return <h1>Salut {this.props.name} !</h1>;
}
}
<Greeting name="Clara" />refs
Vous permet d’accéder à des refs textuelles historiques pour ce composant.
state
L’état d’un composant à base de classe est mis à disposition dans this.state. La champ state doit être un objet. Ne modifiez pas l’état directement. Si vous souhaitez modifier l’état, appelez setState avec un objet d’état en argument.
class Counter extends Component {
state = {
age: 31,
};
handleAgeChange = () => {
this.setState({
age: this.state.age + 1
});
};
render() {
return (
<>
<button onClick={this.handleAgeChange}>
Prendre de l’âge
</button>
<p>Vous avez {this.state.age} ans.</p>
</>
);
}
}constructor(props)
Le constructeur est exécuté avant le montage (l’ajout dans le DOM) de votre composant. En général, vous n’utilisez un constructeur dans React que pour deux raisons. Il vous permet de déclarer votre état puis de lier certaines de vos méthodes à votre instance :
class Counter extends Component {
constructor(props) {
super(props);
this.state = { counter: 0 };
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
// ...
}Si vous utilisez une syntaxe JavaScript moderne, vous aurez rarement besoin des constructeurs. Vous pouvez plutôt réécrire le code ci-dessus en utilisant des initialiseurs de champs d’instance qui sont pris en charge par tous les navigateurs modernes et par des outils comme Babel :
class Counter extends Component {
state = { counter: 0 };
handleClick = () => {
// ...
}Un constructeur ne devrait contenir aucun effet de bord ni aucun abonnement.
Paramètres
props: les props initiales du composant.
Valeur renvoyée
constructor ne devrait rien renvoyer.
Limitations
-
Ne lancez aucun effet de bord et ne souscrivez aucun abonnement dans le constructeur. Utilisez plutôt
componentDidMountpour ça. -
Dans un constructeur, vous devez impérativement appeler
super(props)avant toute autre instruction. Si vous ne le faites pas,this.propsseraundefinedpendant l’exécution du constructeur, ce qui peut être déroutant et causer des bugs. -
Le constructeur est le seul endroit où vous pouvez affecter une valeur directement à
this.state. Dans toutes les autres méthodes, vous devez plutôt utiliserthis.setState(). En revanche, n’appelez passetStatedans le constructeur. -
Lorsque vous faites du rendu côté serveur, le constructeur sera exécuté côté serveur aussi, suivi de la méthode
render. En revanche, les méthodes de cycle de vie telles quecomponentDidMountoucomponentWillUnmountne seront pas exécutées côté serveur. -
En Mode Strict, React appellera votre