createRef crée un objet ref qui peut contenir une valeur quelconque.
class MyInput extends Component {
inputRef = createRef();
// ...
}Référence
createRef()
Appelez createRef pour déclarer une ref au sein d’un composant à base de classe.
import { createRef, Component } from 'react';
class MyComponent extends Component {
intervalRef = createRef();
inputRef = createRef();
// ...Voir d’autres exemples ci-dessous.
Paramètres
createRef ne prend aucun paramètre.
Valeur renvoyée
createRef renvoie un objet doté d’une unique propriété :
current: elle vaut initialementnull. Vous pourrez ensuite la modifier. Si vous passez l’objet ref à React en tant que proprefd’un nœud JSX, React définira automatiquement sa propriétécurrent.
Limitations
createRefrenvoie toujours un objet différent. C’est équivalent à écrire{ current: null }vous-même.- Dans une fonction composant, vous voudrez certainement utiliser plutôt
useRef, qui renverra toujours le même objet. const ref = useRef(null)est équivalent àconst [ref, _] = useState(() => createRef()).
Usage
Déclarer une ref dans un composant à base de classe
Pour déclarer une ref dans un composant à base de classe, appelez createRef et affectez son résultat à un champ d’instance :
import { Component, createRef } from 'react';
class Form extends Component {
inputRef = createRef();
// ...
}Si vous passez ensuite ref={this.inputRef} à un <input> dans votre JSX, React fera automatiquement pointer this.inputRef.current sur le nœud DOM du champ. Par exemple, voici comment écrire un bouton qui activera le champ :
import { Component, createRef } from 'react'; export default class Form extends Component { inputRef = createRef(); handleClick = () => { this.inputRef.current.focus(); } render() { return ( <> <input ref={this.inputRef} /> <button onClick={this.handleClick}> Activer le champ </button> </> ); } }
Alternatives
Migrer d’une classe avec createRef à une fonction avec useRef
Pour tout nouveau code, nous vous conseillons d’utiliser des fonctions composants plutôt que des composants à base de classes. Si vous avez des composants existants à base de classes qui utilisent createRef, voici comment les convertir. Prenons le code original suivant :
import { Component, createRef } from 'react'; export default class Form extends Component { inputRef = createRef(); handleClick = () => { this.inputRef.current.focus(); } render() { return ( <> <input ref={this.inputRef} /> <button onClick={this.handleClick}> Activer le champ </button> </> ); } }
Lorsque vous convertissez ce composant d’une classe vers une fonction, remplacez les appels à createRef par des appels à useRef :
import { useRef } from 'react'; export default function Form() { const inputRef = useRef(null); function handleClick() { inputRef.current.focus(); } return ( <> <input ref={inputRef} /> <button onClick={handleClick}> Activer le champ </button> </> ); }