해당 행의 아무 곳이나 마우스를 가져갈 때 TableRow 열의 아이콘 색상을 변경할 수 있습니까?

사이먼 롱

material-ui 4.9.5를 사용하고 있습니다.

여기에 내 문제의 예를 들어 보았습니다. 나는이 Table내가 몇 가지 간단한의 JSON 데이터로 채울 수있는합니다. 각 행 데이터는 다음과 같습니다.

{
      icon: {
         {
              iconElement: FolderIcon,
              color: "red",
              hoverColor: "green"
         }
      },
      projectName: "Project1"
}

따라서 각 행은 고유 한 아이콘과 고유 한 색상 및 호버 색상을 가질 수 있습니다.

여기에 이미지 설명 입력

내가 정말로 난처한 것은 사용자가 해당 행 내에서 아무 곳이나 마우스를 가져갈 때 개별 아이콘의 호버 색상을 트리거하는 방법입니다.

행에 대한 호버 트리거가 있고 호버시 배경 변경을 트리거합니다. 마우스 오버시 아이콘을 변경하는 방법을 알 수 없습니다. 이것이 내가 지금까지 가지고있는 것입니다.

icon-hover-color-table-row 수정

import React from "react";
import PropTypes from "prop-types";
import { makeStyles } from "@material-ui/core/styles";
import Table from "@material-ui/core/Table";
import TableBody from "@material-ui/core/TableBody";
import TableCell from "@material-ui/core/TableCell";
import TableContainer from "@material-ui/core/TableContainer";
import TableHead from "@material-ui/core/TableHead";
import TableRow from "@material-ui/core/TableRow";
import Paper from "@material-ui/core/Paper";

const useStyles = makeStyles({
  rowIconStyle: {
    minWidth: 50,
    minHeight: 50
  },
  tableRowStyle: {
    cursor: "pointer",
    "&:hover": {
      backgroundColor: "darkGrey"
    }
  }
});

export default function MyTableComponent(props) {
  const styles = useStyles();
  const DEFAULT_TABLE_ROW_ICON_COLOR = "grey";
  return (
    <TableContainer component={Paper}>
      <Table aria-label="simple table">
        <TableHead>
          <TableRow>
            <TableCell>Icon</TableCell>
            <TableCell>Name</TableCell>
          </TableRow>
        </TableHead>
        <TableBody>
          {props.tableRowsData.map(row => {
            const RowIcon =
              row.icon && row.icon.iconElement
                ? row.icon.iconElement
                : () => <div />;
            let iconElement = (
              <RowIcon
                className={styles.rowIconStyle}
                style={{
                  color:
                    row.icon && row.icon.color
                      ? row.icon.color
                      : DEFAULT_TABLE_ROW_ICON_COLOR
                }}
              />
            );
            return (
              <TableRow key={row.name} className={styles.tableRowStyle}>
                <TableCell>{iconElement}</TableCell>
                <TableCell>{row.projectName}</TableCell>
              </TableRow>
            );
          })}
        </TableBody>
      </Table>
    </TableContainer>
  );
}

MyTableComponent.propTypes = {
  tableRowsData: PropTypes.array
};

어떤 제안이라도 대단히 감사합니다.

라이언 코그 스웰

IE를 지원할 필요가 없다고 표시 했으므로 CSS 변수를 활용할 수 있습니다 . 호버 색상을 데이터로 관리하고 각 아이콘이 다른 호버 색상을 가질 수 있으므로 특히 유용합니다.

첫 번째 단계는 (사용자 정의 CSS의 속성으로 각 아이콘에 대한 관심이 개 색상을 제공하는 것입니다 --icon-color--hover-icon-color아래)를 :

            const RowIcon =
              row.icon && row.icon.iconElement
                ? row.icon.iconElement
                : () => <div />;
            const iconColor =
              row.icon && row.icon.color
                ? row.icon.color
                : DEFAULT_TABLE_ROW_ICON_COLOR;
            const iconHoverColor =
              row.icon && row.icon.hoverColor ? row.icon.hoverColor : iconColor;
            let iconElement = (
              <RowIcon
                className={styles.rowIconStyle}
                style={{
                  "--icon-color": iconColor,
                  "--hover-icon-color": iconHoverColor
                }}
              />

그런 다음 CSS에서 다음 CSS 속성을 활용할 수 있습니다.

const useStyles = makeStyles({
  rowIconStyle: {
    minWidth: 50,
    minHeight: 50,
    color: "var(--icon-color)",
    "$tableRowStyle:hover &": {
      color: "var(--hover-icon-color)"
    }
  },
  tableRowStyle: {
    cursor: "pointer",
    "&:hover": {
      backgroundColor: "darkGrey"
    }
  }
});

icon-hover-color-table-row 수정

관련 답변 : material-ui jss 스타일을 사용하여 부모 위로 마우스를 가져갈 때 자식 스타일을 어떻게 변경합니까?

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관