title |
---|
createRef |
createRef
se usa principalmente para componentes de clase. Los componentes de función generalmente usan useRef
en su lugar.
createRef
crea un objeto ref que puede contener un valor arbitrario.
class MyInput extends Component {
inputRef = createRef();
// ...
}
Invoca a createRef
para declarar una ref dentro de un componente de clase.
import { createRef, Component } from 'react';
class MyComponent extends Component {
intervalRef = createRef();
inputRef = createRef();
// ...
createRef
no recibe parámetros.
createRef
retorna un objeto con una única propiedad:
current
: Inicialmente, se establece ennull
. Posteriormente, se puede establecer en cualquier otra cosa. Si pasas el objeto ref a React como un atributoref
de un nodo JSX, React establecerá su propiedadcurrent
.
createRef
siempre devuelve un objeto diferente. Es equivalente a escribir{ current: null }
manualmente.- En un componente de función, probablemente querrás usar
useRef
en su lugar, que siempre devuelve el mismo objeto. const ref = useRef()
es equivalente aconst [ref, _] = useState(() => createRef(null))
.
Para declarar una referencia (ref
) dentro de un componente de clase, invoca a createRef
y asigna el resultado a un campo de clase:
import { Component, createRef } from 'react';
class Form extends Component {
inputRef = createRef();
// ...
}
Si ahora pasas ref={this.inputRef}
a un <input>
en tu JSX, React llenará this.inputRef.current
con el nodo del DOM del input. Por ejemplo, así es como puedes crear un botón que enfoca el input:
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}>
Enfoca el input
</button>
</>
);
}
}
createRef
se usa principalmente para componentes de clase. Los componentes de función generalmente dependen de useRef
en su lugar.
Migrando de una clase con createRef
a una función con useRef
{/migrating-from-a-class-with-createref-to-a-function-with-useref/}
Recomendamos utilizar componentes de función en lugar de componentes de clase en código nuevo. Si tienes componentes de clase existentes que utilizan createRef
, así es cómo puedes convertirlos. Este es el código original:
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}>
Enfoca el input
</button>
</>
);
}
}
Cuando convierta este componente de clase a función, reemplace las invocaciones de createRef
con 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}>
Enfoca el input
</button>
</>
);
}