微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单击标题时突出显示表格列

如何解决单击标题时突出显示表格列

我需要能够实现一项功能,当您单击每个单独的列标题时,它会突出显示所选列。例如,用户单击标题 id 单元格,它将突出显示 id 列,而突出显示删除从之前的选择中,每次单击新的标题单元格时。仅在此处显示我认为需要的主要文件。非常感谢任何帮助。

我的表看起来像这样的结构:

id |姓名 |年龄

  1. |鲍勃。 | 18
  2. |约翰 | 25

PeopleDataTable.js:

import React,{ useMemo } from 'react';
import { useStoreState,useStoreActions } from 'easy-peasy';
import DataTable from './ReactTable';
import { useHistory } from 'react-router-dom';
import columns from './Cols';

const PeopleDataTable = () => {
  const data = [];
  const cols = useMemo(() => columns(),[]);
    
  return (
    <>
        <DataTable columns={cols} data={} />
    </>
  );
};

export default PeopleDataTable;

ReactTable.js

import React,{ useState } from 'react';
import styled from 'styled-components';
import PropTypes from 'prop-types';
import { useTable } from 'react-table';
import DataTableLoader from './DataTableLoader';

const DatatableWrapperLoading = styled.div`
  ${(props) => (props.isLoading ? props.theme.DataTableTheme.dataTableWrapperLoadingStyles : ``)}
`;

const DatatableWrapper = styled.div`
  ${({ theme }) => theme.DataTableTheme.dataTableWrapperStyles}
`;

const DivTable = styled.div`
  ${({ theme }) => theme.DataTableTheme.dataTableStyles}
`;

const DivThead = styled.div`
  ${({ theme }) => theme.DataTableTheme.dataTableHeaderStyles}
`;

const DivTableRow = styled.div`
  ${({ theme }) => theme.DataTableTheme.dataTableRowStyles}
`;

const DivTableBodyRow = styled(DivTableRow)`
  ${({ theme }) => theme.DataTableTheme.dataTableBodyRowStyles}
`;

const DivTableCol = styled.div`
  ${({ theme }) => theme.DataTableTheme.dataTableColStyles}
`;

const DivTableBody = styled.div`
  ${({ theme }) => theme.DataTableTheme.dataTableBodyStyles}
`;

const OverFlowContainer = styled.div`
  ${({ theme }) => theme.DataTableTheme.dataTableOverflowStyles}
`;

const DataTable = ({ columns,data,performOverflow,onRowClick,isLoading }) => {
  const { getTableProps,getTableBodyProps,headerGroups,rows,prepareRow } = useTable({
    columns,});
    
  return (
    <>
      {data && data.length > 0 ? (
        <DatatableWrapperLoading isLoading={isLoading}>
          <DataTableLoader isLoading={isLoading} />
          <OverFlowContainer performOverflow={performOverflow}>
            <DatatableWrapper>
              <DivTable {...getTableProps()}>
                <DivThead>
                  {headerGroups.map((headerGroup) => (
                    <DivTableRow {...headerGroup.getHeaderGroupProps()}>
                      {headerGroup.headers.map((column) => (
                        <DivTableCol
                          style={column.style ? column.style('colWithoutSort') : null}
                          {...column.getHeaderProps()}
                          className={`header-${column.id}`}
                        >
                          {column.render('Header')}
                        </DivTableCol>
                      ))}
                    </DivTableRow>
                  ))}
                </DivThead>

                <DivTableBody {...getTableBodyProps()}>
                  {rows.map((row) => {
                    prepareRow(row);
                    return (
                      <DivTableBodyRow {...row.getRowProps()} onClick={() => {}}>
                        {row.cells.map((cell,c) => {
                          return (
                            <DivTableCol
                              className={`cell-${cell.column.id}`}
                              {...cell.getCellProps()}
                            >
                              {cell.render('Cell')}
                            </DivTableCol>
                          );
                        })}
                      </DivTableBodyRow>
                    );
                  })}
                </DivTableBody>
              </DivTable>
            </DatatableWrapper>
          </OverFlowContainer>
        </DatatableWrapperLoading>
      ) : null}
    </>
  );
};

DataTable.defaultProps = {
  columns: null,data: null,performOverflow: false,onRowClick: null,isLoading: null,};
DataTable.propTypes = {
  columns: PropTypes.array,data: PropTypes.array,performOverflow: PropTypes.bool,onRowClick: PropTypes.func,isLoading: PropTypes.bool,};

export default DataTable;

Cols.js:

import React from 'react';
import styled,{ ThemeProvider } from 'styled-components';

const colWithoutSort = (header) => {
  return header === 'colWithoutSort'
    ? {
        flexBasis: '67px',flexGrow: '0',justifyContent: 'center',pointerEvents: 'none',}
    : {
        flexBasis: '67px',};
};

const Div = styled.div`
  font-weight: bold;
`;

const IconContainer = styled.div`
  text-align: center;
  margin: auto;
`;

const Text = styled.span`
  display: block;
  margin-bottom: 5px;
  font-size: 11px;
`;

const ProgressWrapper = styled.div`
  display: block;
`;

const Container = styled.div`
  display: flex;
`;

const columns = (history) => {
  return [
    {
      id: 'id',Header: () => {
        return (
          <TableHeader
            title="id"
            field="id"
          />
        );
      },accessor: (item) => {
        return <>{item.id} </>;
      },style: () => {
        return {
          flexBasis: '97px',};
      },},{
      id: 'name',Header: () => {
        return <TableHeader title="name" />;
      },accessor: 'name',style: () => {
        return {
          flexBasis: '125px',{
      id: 'age',Header: () => {
        return (
          <TableHeader
            title="Age"
            field="age"
          />
        );
      },];
};

export default columns;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。