React - 如何在悬停时将 CSS class 动态应用到单个 table 行

React - How to dynamically apply a CSS class to a single table row on hover

我试图在鼠标悬停在行中的任何单元格上时以粉红色突出显示 'Position' 和 'Team' 单元格。

我的悬停 class 正在应用,但应用于 每行 的前两个单元格,而不是特定行的前两个单元格。

无悬停:

悬停:

onClick 事件识别单独的行(即单击某行时我可以看到 team.teamId),但是 'tableStyles.rowHovered' class 应用于每一行,无论哪一行我盘旋过去。

const [inHover, setHover] = useState(false);
        
    const hoverStyles = () => {
        
            let styles = `${tableStyles.rowBorderless} ${tableStyles.pointer}`; 
        
            if (inHover) {
              styles += ` ${tableStyles.rowHovered}`;
            }
        
            return styles;
          }
          
          const getTeamRow = (team, index, tableData) => {
        
            let positionShifts = getMinAndMaxPositions(team, tableData);
            //console.log(positionShifts);
        
            return (
              <tr id={'teamRow' + (index + 1)} key={team.teamId} onMouseEnter={() => setHover(true)} onMouseLeave={() => setHover(false)}>
                <td className={hoverStyles()} onClick={() => { setSelectedTeamId(team.teamId) }}>{index + 1}</td>
                <td className={hoverStyles()} onClick={() => { setSelectedTeamId(team.teamId) }}>{team.teamName}</td>                       
        
                {tablePositionArray.map((td) => {
                  return <td id={'posCol' + td} className={getTableStyles(positionShifts.minPos, positionShifts.maxPos, td)} key={td}></td>                               
                })}                          
              </tr>
            );
          }

这不是我项目的全部代码,只是我的 table 形成的周围区域。

提前致谢。

我可以想到 2 个选项, 您的代码中的问题是悬停状态是所有行的状态。

要解决它你至少可以通过这两个选项: 首先,也许是最好的: 只是在这些列中添加 css 并添加悬停行为以获取更多信息看这里 https://developer.mozilla.org/en-US/docs/Web/CSS/:hover

或: 在悬停状态下,您可以提供行的索引或 ID 来更新样式。

    const hoverStyles = (index) => {
        
            let styles = `${tableStyles.rowBorderless} ${tableStyles.pointer}`; 
        
            if (index === inHover) {
              styles += ` ${tableStyles.rowHovered}`;
            }
        
            return styles;
          }

并用行的索引更新索引

<tr id={'teamRow' + (index + 1)} key={team.teamId} 
       onMouseEnter={() => setHover(index)} onMouseLeave={() => setHover(null)}>
<td className={hoverStyles(index)} onClick={() => { 
        setSelectedTeamId(team.teamId) }}>{index + 1}</td>
<td className={hoverStyles(index)} onClick={() => { 
        setSelectedTeamId(team.teamId)}}>