createRef
Ошибка
createRef в основном используется для компонентных классов. Функциональные компоненты обычно полагаются на useRef вместо этого.
createRef создаёт объект ссылок, который может содержать произвольное значение.
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всегда возвращает другой объект. Это эквивалентно написанию{ current: null }самостоятельно. - В функциональном компоненте, вероятно, нужно использовать
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> </> ); }
© 2013–present Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
https://react.dev/reference/react/createRef