createRef
createRef здебільшого використовується для компонентів класу . Функціональні компоненти зазвичай покладаються на useRef.
createRef створює об'єкт ref, який може містити довільне значення.
class MyInput extends Component {
inputRef = createRef();
// ...
}
Посилання
createRef()
Виклик createRef для оголошення посилання всередині компонента класу .
import { createRef, Component } from 'react';
class MyComponent extends Component {
intervalRef = createRef();
inputRef = createRef();
// ...
Дивіться більше прикладів нижче.
Параметри
createRef не приймає жодних параметрів.
Повертає
createRef повертає об'єкт з однією властивістю:
current: Початково встановлено значенняnull. Пізніше ви можете змінити це значення на будь-яке інше. Якщо ви передасте React об'єкт рефа як атрибутrefвузлу JSX, React встановить його властивістьcurrent.
Застереження
createRefзавжди повертає об'єкт different. Це еквівалентно написанню{ current: null }yourself.- У функціональному компоненті вам, ймовірно, потрібен
useRef, який завжди повертає той самий об'єкт. const ref = useRef()еквівалентноconst [ref, _] = useState(() => createRef(null)).
Використання
Оголошення рефа у компоненті класу
Щоб оголосити реф всередині компонента класу , потрібно викликати createRef і присвоїти його результат полю класу:
import { Component, createRef } from 'react';
class Form extends Component {
inputRef = createRef();
// ...
}
Якщо ви зараз передасте ref={this.inputRef} до <input> у вашому JSX, React заповнить this.inputRef.current вхідним вузлом DOM. Наприклад, ось як ви можете створити кнопку, яка фокусує введення:
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}>
Focus the input
</button>
</>
);
}
}
createRef здебільшого використовується для компонентів класу . Функціональні компоненти зазвичай покладаються на useRef.
Альтернативи
Перехід від класу з createRef до функції з useRef
У новому коді рекомендується використовувати функціональні компоненти замість класових компонентів. Якщо у вас є деякі існуючі класові компоненти, що використовують createRef, ось як ви можете їх перетворити. Це оригінальний код:
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}>
Focus the input
</button>
</>
);
}
}
Коли ви перетворюєте цей компонент з класу на функцію, замініть виклики до createRef викликами до 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}>
Focus the input
</button>
</>
);
}