Как использовать useRef хук в React


Хуки — это новое и элегантное средство, представленное в React 16.8, которое позволяет нам использовать состояние и другие возможности React в функциональных компонентах. Один из наиболее интересных хуков — useRef. Этот хук предоставляет возможность получить доступ к DOM-узлам и сохранять переменные в течение времени жизни компонента.

Использование useRef хука стало особенно полезным в случаях, когда мы хотим сохранить ссылку на DOM-узел или хотим сохранить переменную, которая не вызывает перерендеринг компонента при ее изменении. Мы можем использовать useRef хук для сохранения любого значения, и это значение останется неизменным до следующего рендера компонента.

Один из наиболее распространенных случаев использования useRef хука — управление фокусом на определенном элементе после его монтирования. Также он может быть использован для сохранения предыдущего значения переменной между рендерами компонента или для работы с анимацией, используя setInterval или requestAnimationFrame.

В этой статье мы рассмотрим, как правильно использовать useRef хук в React и приведем несколько примеров, чтобы продемонстрировать его в действии. Мы покажем, как сохранить ссылку на DOM-элемент, как использовать хук для сохранения предыдущего значения переменной и как создать анимацию с помощью useRef.

Что такое useRef хук?

useRef позволяет создавать изменяемые ссылки, которые могут быть сохранены и использованы внутри функционального компонента. В отличие от useState, изменение значения useRef не приводит к повторному рендерингу компонента.

Основное назначение useRef заключается в следующем:

  • Сохранение ссылки на DOM элемент: useRef может использоваться для сохранения ссылки на конкретный DOM элемент, чтобы иметь доступ к нему и выполнять с ним различные операции, например, изменять его свойства или добавлять/удалять классы.
  • Хранение изменяемого значения: useRef может использоваться для хранения значения, которое может быть изменено во время жизненного цикла компонента, при этом не вызывая повторный рендеринг.

Чтобы использовать useRef хук, его нужно импортировать из библиотеки React. Затем, создайте переменную с помощью функции useRef, и присвойте ей начальное значение. Далее, можно использовать эту переменную для доступа к DOM элементу или хранения изменяемого значения.

Пример использования useRef:

import React, { useRef } from 'react';function MyComponent() {// Сохранение ссылки на DOM элементconst myRef = useRef();// Хранение изменяемого значенияconst counterRef = useRef(0);// Доступ к текущему значению useRefconsole.log(myRef.current);return (
 );}

В приведенном выше примере useRef используется для сохранения ссылки на div элемент с помощью атрибута ref, а также для хранения изменяемого значения counterRef, который можно изменять без вызова повторного рендеринга компонента.

Как использовать useRef хук в React

Для использования useRef в React, необходимо сначала импортировать его из библиотеки:

import React, { useRef } from 'react';

Затем, создайте переменную с помощью хука useRef:

const myRef = useRef();

Вы можете применять useRef для получения доступа к DOM-элементам путем установки ref свойства. Например, установите ref свойство для элемента input:

<input ref={myRef} />

Затем вы можете получить доступ к значению и другим свойствам этого элемента через свойство current объекта, возвращаемого хуком useRef:

console.log(myRef.current.value);

Кроме того, useRef может использоваться для сохранения любых данных между рендерами компонента. Например, вы можете сохранить прежнее состояние компонента при рендере:

const previousState = useRef();

Внутри компонента вы можете обновить это сохраненное значение:

previousState.current = newState;

Хук useRef очень полезен, когда вам нужно получить доступ к DOM-элементам или сохранить данные между рендерами компонента в React. Используйте его для упрощения и оптимизации вашего кода.

Примеры
1. Получение значения input:
import React, { useRef } from 'react';function MyComponent() {const inputRef = useRef();const handleClick = () => {console.log(inputRef.current.value);};return (<div><input ref={inputRef} /><button onClick={handleClick}>Получить значение</button></div>);}
2. Сохранение предыдущего состояния:
import React, { useState, useRef } from 'react';function MyComponent() {const [count, setCount] = useState(0);const previousCountRef = useRef();const handleIncrease = () => {setCount(count + 1);};const handleDecrease = () => {setCount(count - 1);};useEffect(() => {previousCountRef.current = count;});const previousCount = previousCountRef.current;return (<div><p>Текущий счет: {count}</p><p>Предыдущий счет: {previousCount}</p><button onClick={handleIncrease}>Увеличить</button><button onClick={handleDecrease}>Уменьшить</button></div>);}

Примеры использования useRef хука

Вот несколько примеров, которые показывают, как использовать useRef хук в React:

  • Сохранение ссылки на элемент DOM: useRef может использоваться для сохранения ссылки на элемент DOM, что позволяет вам взаимодействовать с этим элементом напрямую. Например, вы можете использовать useRef для создания ссылки на элемент input и получения доступа к его значению или методам, таким как focus().
  • Сохранение предыдущего значения: при использовании хука useState, useRef может быть использован для сохранения предыдущего значения состояния. Это полезно, когда вам нужно отслеживать изменение состояния и выполнять определенные действия при его изменении.
  • Оптимизация рендера: при использовании хука useMemo или useCallback, useRef может быть использован для сохранения ссылки на простые значения или функции, чтобы они не пересоздавались при каждом рендере компонента. Это может помочь улучшить производительность вашего приложения.

Важно помнить, что useRef возвращает изменяемый объект ref, который будет сохранять свое значение между рендерами компонента. Поэтому его использование требует осторожности и следования правилам хука useRef.

Практическое руководство по использованию useRef хука

Хук useRef в React предоставляет возможность получить доступ к DOM-элементам или сохранить значения, которые не вызывают повторное рендеринга компонента. Этот хук особенно полезен при работе с формами, анимацией и другими ситуациями, когда вам нужно получить доступ к элементам на странице.

Вот некоторые практические примеры использования useRef:

  1. Управление фокусом: useRef можно использовать для задания фокуса на определенном элементе после его монтирования или выполнения определенного действия. Например, вы можете использовать useRef для задания фокуса на поле ввода при открытии модального окна.

    {`import React, { useRef, useEffect } from "react";function Modal() {const inputRef = useRef();useEffect(() => {inputRef.current.focus();}, []);return (
     );}`}
  2. Анимация: хук useRef также полезен при работе с анимацией. Вы можете использовать useRef для доступа к DOM-элементу и применения к нему анимации. Например, вы можете использовать useRef для создания простой анимации появления и исчезновения элемента.

    {`import React, { useRef, useEffect } from "react";import gsap from "gsap";function AnimatedElement() {const elementRef = useRef();useEffect(() => {gsap.to(elementRef.current, { opacity: 0, duration: 1 });}, []);return (
    Анимированный элемент
     );}`}
  3. Сохранение предыдущего значения: useRef также позволяет сохранять предыдущее значение свойства или состояния. Например, вы можете использовать useRef для отслеживания предыдущего значения имени пользователя и произвести действие, если оно изменилось.

    {`import React, { useRef, useEffect } from "react";function UserComponent({ name }) {const prevNameRef = useRef();useEffect(() => {prevNameRef.current = name;if (name !== prevNameRef.current) {console.log("Имя пользователя изменилось!");}});return (
    Привет, {name}!
     );}`}

Это всего лишь несколько примеров использования useRef хука в React. Однако, хук useRef предоставляет множество возможностей для работы с DOM-элементами и сохранения значений, и его использование может значительно упростить разработку ваших приложений.

Добавить комментарий

Вам также может понравиться