L'API haut-niveau de React
These docs are old and wonât be updated. Go to react.dev for the new React docs.
These new documentation pages teach modern React:
Lâobjet React
est le point dâentrĂ©e de la bibliothĂšque React. Si vous chargez React depuis une balise <script>
, ces API de haut-niveau sont disponibles depuis lâobjet global React
. Si vous utilisez npm avec la syntaxe ES6, vous pouvez écrire : import React from 'react'
. Si vous utilisez npm avec la syntaxe ES5, vous pouvez écrire : var React = require('react')
.
Aperçu
Composants
Les composants React vous permettent de dĂ©couper une interface utilisateur (UI, pour User Interface, NdT) en blocs indĂ©pendants et rĂ©utilisables, ce qui vous permet de concevoir chaque partie en isolation. Un composant React peut ĂȘtre dĂ©fini en Ă©tendant les classes React.Component
ou React.PureComponent
.
Si vous nâutilisez pas les classes ES6, vous pouvez utiliser le module create-react-class
à la place. Lisez React sans ES6 pour plus de détails.
Un composant React peut aussi ĂȘtre dĂ©fini via une fonction que lâon pourra choisir dâenrober avec React.memo
:
Créer des éléments React
Nous vous recommandons dâutiliser JSX pour dĂ©finir Ă quoi ressemblera votre UI. Tous les Ă©lĂ©ments JSX ne sont que du sucre syntaxique qui cache des appels Ă React.createElement()
. Si vous utilisez JSX, vous ne devriez pas avoir besoin dâappeler les mĂ©thodes suivantes :
Lisez React sans JSX pour plus de détails.
Transformer des éléments
React
propose plusieurs API pour manipuler les éléments :
Fragments
React
fournit également un composant particulier pour réaliser le rendu de plusieurs éléments sans avoir à les envelopper avec un autre.
Refs
Suspense
Suspense permet aux composants « dâattendre » quelque chose avant de sâafficher. Pour le moment, Suspense ne prend en charge quâun seul cas dâusage : le chargement dynamique de composants avec React.lazy
. Ă lâavenir, il permettra de gĂ©rer dâautres cas dâusages tels que le chargement de donnĂ©es distantes.
Transitions
Transitions are a new concurrent feature introduced in React 18. They allow you to mark updates as transitions, which tells React that they can be interrupted and avoid going back to Suspense fallbacks for already visible content.
Hooks
Les Hooks sont une nouveautĂ© de React 16.8. Ils vous permettent dâutiliser les Ă©tats et dâautres fonctionnalitĂ©s de React sans avoir Ă Ă©crire de classes. Les Hooks disposent de leur propre documentation et leur API est dĂ©taillĂ©e Ă part :
RĂ©fĂ©rence de lâAPI
React.Component
This content is out of date.
Read the new React documentation for
Component
.
React.Component
est la classe de base utilisée pour créer des composants React avec la syntaxe des classes ES6 :
class Greeting extends React.Component {
render() {
return <h1>Bonjour {this.props.name}</h1>;
}
}
Rendez-vous sur la page de rĂ©fĂ©rence de lâAPI React.Component
pour voir la liste complÚte des méthodes et propriétés de la classe de base React.Component
.
React.PureComponent
This content is out of date.
Read the new React documentation for
PureComponent
.
React.PureComponent
est similaire Ă React.Component
. La seule différence est que React.Component
nâimplĂ©mente pas la mĂ©thode shouldComponentUpdate()
, alors que React.PureComponent
lâimplĂ©mente en rĂ©alisant une comparaison de surface de lâĂ©tat et des propriĂ©tĂ©s.
Si la fonction render()
dâun de vos composants React produit un rendu identique pour le mĂȘme Ă©tat et les mĂȘmes propriĂ©tĂ©s, le faire Ă©tendre React.PureComponent
devrait améliorer les performances dans certains cas.
Remarque
La méthode
shouldComponentUpdate()
deReact.PureComponent
réalise une simple comparaison de surface. Avec des données complexes, elle peut produire des faux négatifs si la structure de données subit des changements profonds. Ne créez des composants avecPureComponent
que si vous avez des états et des props simples, et le cas échéant utilisezforceUpdate()
si vous savez que vos donnĂ©es ont changĂ© en profondeur. Vous pouvez aussi envisager dâutiliser des objets immuables pour simplifier la comparaison rapide de donnĂ©es imbriquĂ©es.De plus, la mĂ©thode
shouldComponentUpdate()
deReact.PureComponent
ignore la mise Ă jour des propriĂ©tĂ©s de tout lâarbre des composants enfants. Assurez-vous donc que tous les composants enfants sont Ă©galement « purs ».
React.memo
This content is out of date.
Read the new React documentation for
memo
.
const MyComponent = React.memo(function MyComponent(props) {
/* Faire le rendu en utilisant les props */
});
React.memo
est un composant dâordre supĂ©rieur.
Si vous avez un composant qui affiche toujours le mĂȘme rĂ©sultat pour un mĂȘme jeu de propriĂ©tĂ©s, vous pouvez lâenrober avec React.memo
, ce qui mémoïsera le résultat et devrait augmenter les performances dans certains cas. Cela signifie que React sautera le rafraßchissement du composant en réutilisant son dernier rendu en date.
React.memo
ne se préoccupe que des modifications de props. Si votre fonction composant enrobée par React.memo
utilise un Hook useState
ou useContext
dans son implĂ©mentation, des changements dâĂ©tat local ou de contexte entraĂźneront tout de mĂȘme un nouveau rendu.
Par dĂ©faut, seule une comparaison de surface des props sera faite. Si vous voulez gĂ©rer cette comparaison vous-mĂȘme, vous pouvez fournir une fonction de comparaison personnalisĂ©e en deuxiĂšme argument.
function MyComponent(props) {
/* Faire le rendu en utilisant les props */
}
function areEqual(prevProps, nextProps) {
/*
Renvoie `true` si passer l'objet nextProps Ă la fonction de rendu
produira le mĂȘme rĂ©sultat que de lui passer l'objet prevProps.
Renvoie `false` dans le cas contraire.
*/
}
export default React.memo(MyComponent, areEqual);
Cette mĂ©thode nâest quâun outil dâoptimisation des performances. Ne vous y fiez pas pour « empĂȘcher » un rendu car cela peut causer des bugs.
Remarque
Contrairement à la méthode
shouldComponentUpdate()
des composants créés Ă lâaide de classes, la fonctionareEqual
renvoietrue
si les props sont égales etfalse
dans le cas contraire. Câest donc lâinverse deshouldComponentUpdate
.
createElement()
This content is out of date.
Read the new React documentation for
createElement
.
React.createElement(
type,
[props],
[...children]
)
Cette mĂ©thode crĂ©e et renvoie un nouvel Ă©lĂ©ment React du type indiquĂ©. Lâargument type
peut ĂȘtre au choix : une chaĂźne contenant un nom de balise (tel que 'div'
ou 'span'
), un type de composant React (une classe ou une fonction), ou encore un fragment React.
Tout code écrit avec JSX sera converti de maniÚre à utiliser React.createElement()
. Normalement vous ne devriez pas appeler React.createElement()
si vous utilisez JSX. Lisez React sans JSX pour en savoir plus.
cloneElement()
This content is out of date.
Read the new React documentation for
cloneElement
.
React.cloneElement(
element,
[config],
[...children]
)
Cette méthode clone et renvoie un nouvel élément en utilisant element
comme point de dĂ©part. LâĂ©lĂ©ment obtenu aura les props de lâĂ©lĂ©ment originel augmentĂ©es par une fusion de surface des nouvelles props. Les nouveaux Ă©lĂ©ments enfants (children
) remplaceront les anciens. Les key
et ref
issues de lâĂ©lĂ©ment originel seront prĂ©servĂ©es.
React.cloneElement()
est quasiment équivalent à :
<element.type {...element.props} {...props}>{children}</element.type>
Cependant elle préserve les ref
. ConcrÚtement, ça signifie que si vous avez un enfant avec une ref
associĂ©e, vous ne la volerez pas accidentellement Ă votre ancĂȘtre. Vous aurez la mĂȘme ref
associée au nouvel élément. The new ref
or key
will replace old ones if present.
Cette API a été introduite pour remplacer la méthode dépréciée React.addons.cloneWithProps()
.
createFactory()
This content is out of date.
Read the new React documentation for
createFactory
.
React.createFactory(type)
Cette mĂ©thode renvoie une fonction qui produit des Ă©lĂ©ments React dâun type donnĂ©. Comme pour React.createElement()
, lâargument type
peut ĂȘtre au choix : une chaĂźne contenant un nom de balise (tel que 'div'
ou 'span'
), un type de composant React (une classe ou une fonction), ou encore un type de fragment React.
Cette fonction dâaide est historique et nous vous encourageons plutĂŽt Ă utiliser JSX ou directement React.createElement()
.
Normalement vous ne devriez pas appeler React.createFactory()
si vous utilisez JSX. Lisez React sans JSX pour en savoir plus.
isValidElement()
This content is out of date.
Read the new React documentation for
isValidElement
.
React.isValidElement(object)
Cette mĂ©thode vĂ©rifie quâun objet est bien un Ă©lĂ©ment React. Elle renvoie true
ou false
.
React.Children
This content is out of date.
Read the new React documentation for
Children
.
React.Children
fournit des utilitaires pour interagir avec la structure de données opaque de this.props.children
.
React.Children.map
React.Children.map(children, function[(thisArg)])
Cette méthode exécute une fonction sur chacun des enfants directs contenus dans children
avec le this
en vigueur transmis dans lâargument thisArg
. Si children
est un tableau, il sera parcouru et la fonction sera appelée sur chacun des enfants du tableau. Si children
est null
ou undefined
, la méthode renverra null
ou undefined
plutĂŽt quâun tableau.
Remarque
Si
children
est unFragment
il sera traité comme un unique enfant et ne sera pas parcouru.
React.Children.forEach
React.Children.forEach(children, function[(thisArg)])
MĂȘme chose que React.Children.map()
mais sans renvoyer de tableau.
React.Children.count
React.Children.count(children)
Cette méthode renvoie le nombre total de composants présents dans children
, ce total Ă©tant Ă©gal au nombre de fois quâune fonction de rappel passĂ©e Ă map
ou forEach
serait exécutée.
React.Children.only
React.Children.only(children)
Cette méthode vérifie que children
nâa quâun seul enfant (un Ă©lĂ©ment React) et le renvoie. Si ce nâest pas le cas elle lĂšvera une erreur.
Remarque
React.Children.only()
nâaccepte pas la valeur de retour deReact.Children.map()
car il sâagit dâun tableau et non dâun Ă©lĂ©ment React.
React.Children.toArray
React.Children.toArray(children)
Cette méthode renvoie la structure de donnée opaque de children
sous la forme dâun tableau linĂ©arisĂ© ou chaque enfant est dotĂ© dâune key
. Câest utile si vous voulez manipuler une collection dâenfants dans votre mĂ©thode de rendu, en particulier si vous voulez rĂ©organiser ou dĂ©couper this.props.children
avant de le passer Ă dâautres Ă©lĂ©ments.
Remarque
React.Children.toArray()
change leskey
pour préserver la sémantique des tableaux imbriqués pendant la linéarisation des enfants. Pour cela,toArray
préfixe chaquekey
dans le tableau qui sera renvoyé de maniÚre a ce que lakey
de chaque élément soit associée au tableau originel qui les contient.
React.Fragment
This content is out of date.
Read the new React documentation for
Fragment
.
Le composant React.Fragment
vous permet de renvoyer plusieurs éléments depuis une méthode render()
sans avoir à créer un élément DOM supplémentaire :
render() {
return (
<React.Fragment>
Du texte.
<h2>Un en-tĂȘte</h2>
</React.Fragment>
);
}
Vous pouvez Ă©galement lâutiliser via la syntaxe raccourcie <></>
. Pour plus dâinformation, lisez React v16.2.0: Improved Support for Fragments (en anglais).
React.createRef
This content is out of date.
Read the new React documentation for
createRef
.
React.createRef
crée une ref
qui peut ĂȘtre associĂ©e Ă des Ă©lĂ©ments React via lâattribut ref
.
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.inputRef = React.createRef(); }
render() {
return <input type="text" ref={this.inputRef} />; }
componentDidMount() {
this.inputRef.current.focus(); }
}
React.forwardRef
This content is out of date.
Read the new React documentation for
forwardRef
.
React.forwardRef
crĂ©e un composant React qui transfĂšre la valeur de lâattribut ref quâil reçoit Ă un autre composant plus bas dans lâarbre. Cette technique est assez inhabituelle mais elle est particuliĂšrement utile dans deux cas :
- Transférer une référence à un composant DOM
- TransfĂ©rer une rĂ©fĂ©rence au sein dâun composant dâordre supĂ©rieur
React.forwardRef
prend une fonction de rendu comme argument. React appellera cette fonction avec deux arguments props
et ref
. Cette fonction devrait renvoyer un nĆud React.
const FancyButton = React.forwardRef((props, ref) => ( <button ref={ref} className="FancyButton"> {props.children}
</button>
));
// You can now get a ref directly to the DOM button:
const ref = React.createRef();
<FancyButton ref={ref}>Click me!</FancyButton>;
Dans lâexemple ci-avant, la fonction de rendu passĂ©e Ă React.forwardRef
recevra comme deuxiĂšme argument la ref
initialement fournie Ă lâĂ©lĂ©ment <FancyButton ref={ref}>
. Cette fonction va alors transférer la ref
Ă lâĂ©lĂ©ment <button ref={ref}>
.
En conséquence, aprÚs que React aura attaché la ref, ref.current
pointera directement vers lâinstance de lâĂ©lĂ©ment DOM de <button>
.
Pour en savoir plus, lisez Transférer les refs
React.lazy
This content is out of date.
Read the new React documentation for
lazy
.
React.lazy()
vous permet de définir un composant qui sera chargé dynamiquement. Cela aide à réduire la taille du fichier initial en reportant à plus tard le chargement des composants inutiles lors du rendu initial.
Vous pouvez apprendre comment lâutiliser en lisant la documentation sur la dĂ©coupe du code. Vous voudrez peut-ĂȘtre aussi jeter un Ćil Ă cet article, qui explique comment lâutiliser en dĂ©tail.
// Ce composant est chargé dynamiquement
const SomeComponent = React.lazy(() => import('./SomeComponent'));
Notez bien que lâaffichage dâun composant lazy
a besoin dâun composant <React.Suspense>
plus haut dans lâarbre de rendu. Câest de cette maniĂšre que vous pouvez spĂ©cifier un indicateur de chargement.
React.Suspense
This content is out of date.
Read the new React documentation for
Suspense
.
React.Suspense
lets you specify the loading indicator in case some components in the tree below it are not yet ready to render. In the future we plan to let Suspense
handle more scenarios such as data fetching. You can read about this in our roadmap.
React.Suspense
vous permet de dĂ©finir un indicateur de chargement pour le cas oĂč certains composants plus bas dans lâarbre de rendu ne seraient pas encore prĂȘts Ă ĂȘtre affichĂ©s. Pour le moment le seul cas dâusage pris en charge par <React.Suspense>
, câest le chargement diffĂ©rĂ© de composants via React.lazy
:
// Ce composant est chargé dynamiquement
const OtherComponent = React.lazy(() => import('./OtherComponent'));
function MyComponent() {
return (
// Affiche <Spinner> jusqu'à ce que <OtherComponent> soit chargé
<React.Suspense fallback={<Spinner />}>
<div>
<OtherComponent />
</div>
</React.Suspense>
);
}
Tout ça est détaillé dans notre guide sur la découpe du code. Remarquez que les composants lazy
peuvent ĂȘtre profondĂ©ment enfouis dans lâarbre des descendants de Suspense
âils nâont pas besoin dâĂȘtre enveloppĂ©s individuellement. La bonne pratique consiste Ă placer un <Suspense>
aux endroits oĂč vous souhaitez voir un indicateur de chargement, et Ă utiliser lazy()
partout ou vous voulez découper votre code.
Note
For content that is already shown to the user, switching back to a loading indicator can be disorienting. It is sometimes better to show the âoldâ UI while the new UI is being prepared. To do this, you can use the new transition APIs
startTransition
anduseTransition
to mark updates as transitions and avoid unexpected fallbacks.
React.Suspense
in Server Side Rendering
During server side rendering Suspense Boundaries allow you to flush your application in smaller chunks by suspending. When a component suspends we schedule a low priority task to render the closest Suspense boundaryâs fallback. If the component unsuspends before we flush the fallback then we send down the actual content and throw away the fallback.
React.Suspense
during hydration
Suspense boundaries depend on their parent boundaries being hydrated before they can hydrate, but they can hydrate independently from sibling boundaries. Events on a boundary before it is hydrated will cause the boundary to hydrate at a higher priority than neighboring boundaries. Read more
React.startTransition
This content is out of date.
Read the new React documentation for
startTransition
.
React.startTransition(callback)
React.startTransition
lets you mark updates inside the provided callback as transitions. This method is designed to be used when React.useTransition
is not available.
Remarque
Updates in a transition yield to more urgent updates such as clicks.
Updates in a transition will not show a fallback for re-suspended content, allowing the user to continue interacting while rendering the update.
React.startTransition
does not provide anisPending
flag. To track the pending status of a transition seeReact.useTransition
.