# React技巧之鼠标悬浮添加行内样式

原文链接:https://bobbyhadz.com/blog/react-inline-style-hover (opens new window)

作者:Borislav Hadzhiev (opens new window)

正文从这开始~

# 总览

在React中,鼠标悬浮时添加行内样式:

  1. 在元素上设置onMouseEnteronMouseLeave属性。
  2. 当用户鼠标移入或者移出元素时,更新state变量。
  3. 在元素上有条件地设置行内样式。
import {useState} from 'react';

const App = () => {
  const [isHovering, setIsHovering] = useState(false);

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

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

  return (
    <div>
      <div>
        <div
          style={{
            backgroundColor: isHovering ? 'salmon' : '',
            color: isHovering ? 'white' : '',
          }}
          onMouseEnter={handleMouseEnter}
          onMouseLeave={handleMouseLeave}
        >
          Hover me
        </div>
      </div>
    </div>
  );
};

export default App;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

react-hover-inline-styles.png

# 详情

我们在div元素上设置了onMouseEnter 和 onMouseLeave ****属性。

当用户的鼠标移入当前元素时,mouseenter事件会被触发。相反地,当用户的鼠标移出当前元素时,mouseleave事件会被触发。

每当用户将鼠标悬停在div上时,就会调用handleMouseEnter函数。每当用户将鼠标指针移出div元素时,就会调用handleMouseLeave函数。

我们在这两个事件处理程序中所做的就是更新一个state变量,跟踪用户是否在该元素上悬停。

我们可以使用三元运算符,来有条件地在元素上设置行内样式。

<div
  style={{
    backgroundColor: isHovering ? 'salmon' : '',
    color: isHovering ? 'white' : '',
  }}
  onMouseEnter={handleMouseEnter}
  onMouseLeave={handleMouseLeave}
>
  Hover me
</div>
1
2
3
4
5
6
7
8
9
10

三元运算符和if/else运算符非常的相似。

它检查问号左边的值是否为真值,如果是,操作符就返回冒号左边的值,否则就返回右边的值。

换句话说,如果isHovering变量存储的值为true,我们将backgroundColor属性设置为salmon,否则我们将其设置为空字符串。

# 总结

当用户鼠标悬停在元素上时:

  1. handleMouseEnter函数会被调用。
  2. isHovering state变量会被设置为true
  3. 有条件地在元素上设置行内样式。

相反地,当用户鼠标离开元素时:

  1. handleMouseLeave函数会被调用。
  2. isHovering state变量会被设置为false
  3. 恢复元素的样式。