Как стилизовать наведение в React

Введение

Работа с визуальными элементами — отличный способ сделать наш интерфейс интерактивным и привлечь внимание пользователя. Анимация объектов на нашем экране создает уникальный опыт и повышает интерактивность.

В этой статье мы узнаем, как стилизовать наведение курсора в React с помощью CSS, а также как сделать встроенный стиль наведения.

Hover — это псевдокласс, который просто позволяет нам добавлять определенные стили, чтобы пользователь знал, когда его мышь включена и выключена для определенного элемента. В этой статье мы будем использовать коробку:

const App = () => {
   return (
      <div>
         <div className="box">
            <p>Hover me!</p>
         </div>
      </div>
   );
};

который имеет этот базовый стиль:

.box {
   height: 200px;
   width: 200px;
   background-color: rgb(0, 191, 255);
   display: flex;
   justify-content: center;
   align-items: center;
   font-size: 30px;
   cursor: pointer;
}

По сути, мы изменим цвет фона на lightblue когда мышь находится над полем, а затем вернуть его к стилю по умолчанию, когда мышь будет удалена.

Как стилизовать наведение в React

Для этого есть два подхода: внешний и встроенный. Внешний предполагает наличие отдельного файла CSS, который упрощает стили для наведения, тогда как встроенные стили не позволяют нам стилизовать с помощью псевдокласса, но в этой статье мы узнаем, как стилизовать наведение во встроенном CSS с помощью событий мыши.

Как стилизовать наведение курсора в React с помощью внешнего стиля CSS

Это очень похоже на то, как работают HTML и CSS; все, что нам нужно сделать, это дать элементу className (Вы не class) или используйте тег в качестве селектора, на который мы нацелимся, а затем стилизуйте псевдокласс hover:

.box {
   height: 200px;
   width: 200px;
   background-color: rgb(0, 191, 255);
   display: flex;
   justify-content: center;
   align-items: center;
   font-size: 30px;
   cursor: pointer;
}

.box:hover {
   background-color: lightblue;
}

Все, что мы сделали, это добавили :hover псевдокласса к ранее оформленному селектору и измените любые свойства, которые мы хотели изменить, когда мышь находилась над элементом.

Как стилизовать наведение курсора в React с помощью встроенного стиля

Под встроенным стилем мы подразумеваем стиль с помощью тега элемента, который достигается с помощью style атрибут. Если мы хотим преобразовать предыдущий код во встроенный стиль:

const App = () => {
   return (
      <div>
         <div
            style={{
               height: '200px',
               width: '200px',
               backgroundColor: 'rgb(0, 191, 255)',
               display: 'flex',
               justifyContent: 'center',
               alignItems: 'center',
               fontSize: '30px',
               cursor: 'pointer',
            }}
         >
            <p>Hover me!</p>
         </div>
      </div>
   );
};

Повторение подобных стилей в нашем приложении может затруднить чтение, поэтому мы могли бы создать объект стиля, если мы стилизуем только один объект на странице, и нет необходимости создавать для него файл:

const App = () => {

const boxStyle = {
   height: '200px',
   width: '200px',
   backgroundColor: 'rgb(0, 191, 255)',
   display: 'flex',
   justifyContent: 'center',
   alignItems: 'center',
   fontSize: '30px',
   cursor: 'pointer',
};

   return (
      <div>
         <div style={boxStyle}>
            <p>Hover me!</p>
         </div>
      </div>
   );
};

На данный момент мы построили нашу коробку. Чтобы стилизовать наведение с помощью встроенного CSS в React, мы условно устанавливаем встроенные стили, используя состояние, а также onMouseEnter и onMouseLeave props, которые сообщают нам, когда мышь находится на элементе, а когда нет:

import { useState } from 'react';

const App = () => {
   const [isHover, setIsHover] = useState(false);

   const handleMouseEnter = () => {
      setIsHover(true);
   };
   const handleMouseLeave = () => {
      setIsHover(false);
   };

   const boxStyle = {
      <!-- ... -->
   };

   return (
      <div>
         <div
            style={boxStyle}
            onMouseEnter={handleMouseEnter}
            onMouseLeave={handleMouseLeave}
         >
            <p>Hover me!</p>
         </div>
      </div>
   );
};

На этом этапе мы можем условно стилизовать любое свойство, используя *isHover* государство:

const boxStyle = {
   
   backgroundColor: isHover ? 'lightblue' : 'rgb(0, 191, 255)',
};

До сих пор мы видели, как это реализовать. Теперь давайте разберем наш код и объясним, почему мы использовали такой синтаксис. Мы начали с создания состояния, в котором хранится логическое значение, указывающее, когда происходит зависание (true) и в противном случае (по умолчанию установлено значение false):

const [isHover, setIsHover] = useState(false);

Затем мы также добавили два события в div, чтобы помочь изменить наше состояние и узнать, когда мышь находится на поле, а когда нет:

<div
   style={boxStyle}
   onMouseEnter={handleMouseEnter}
   onMouseLeave={handleMouseLeave}
>
   <p>Hover me!</p>
</div>

Ассоциация onMouseEnter событие срабатывает, когда мышь входит в элемент, в то время как onMouseLeave событие срабатывает, когда он уходит. Каждому из этих событий мы присвоили функцию, которую теперь используем для изменения состояния:

const handleMouseEnter = () => {
   setIsHover(true);
};

const handleMouseLeave = () => {
   setIsHover(false);
};

Ознакомьтесь с нашим практическим руководством по изучению Git с рекомендациями, принятыми в отрасли стандартами и прилагаемой памяткой. Перестаньте гуглить команды Git и на самом деле изучить это!

Мы устанавливаем state в каждой функции на основе инициированного события. Наконец, мы можем использовать состояние для условного оформления блока не только для backgroundColor, но и для любого другого стиля:

const boxStyle = {
   
   backgroundColor: isHover ? 'lightblue' : 'rgb(0, 191, 255)',
   color: isHover ? 'red' : 'green',
};

Собрав все это вместе, мы теперь можем стилизовать наведение в React с помощью встроенного стиля:

import { useState } from 'react';

const App = () => {
   const [isHover, setIsHover] = useState(false);

   const handleMouseEnter = () => {
      setIsHover(true);
   };

   const handleMouseLeave = () => {
      setIsHover(false);
   };

   const boxStyle = {
      height: '200px',
      width: '200px',
      display: 'flex',
      justifyContent: 'center',
      alignItems: 'center',
      fontSize: '30px',
      cursor: 'pointer',
      backgroundColor: isHover ? 'lightblue' : 'rgb(0, 191, 255)',
      color: isHover ? 'red' : 'green',
   };

   return (
      <div>
         <div
            style={boxStyle}
            onMouseEnter={handleMouseEnter}
            onMouseLeave={handleMouseLeave}
         >
            <p>Hover me!</p>
         </div>
      </div>
   );
};

export default App;

Заключение

В этой статье мы узнали, как стилизовать зависание в React, используя как внешние, так и встроенные стили. Хотя встроенный стиль не рекомендуется, полезно понять, как он работает, если нам будет предложено его использовать.

Отметка времени:

Больше от Стекабьюс