Cambiar el estilo de encabezado de reactTable

Shubham Vora 15 febrero 2024
Cambiar el estilo de encabezado de reactTable

El reactTable es una biblioteca integrada en React para crear una tabla atractiva. Siempre está obligado a realizar cambios en la tabla cuando utiliza cualquier biblioteca para crear la tabla en cualquier lenguaje de programación.

Hay muy pocas bibliotecas que pueden hacer que todos los componentes sean personalizables. En este artículo, aprenderemos a crear la tabla utilizando la biblioteca reactTable y aplicaremos CSS personalizado al encabezado y cuerpo de la tabla.

Utilice la biblioteca React componentes con estilo para cambiar el estilo de encabezado de reactTable

En el siguiente ejemplo, hemos utilizado la biblioteca reactTable para crear la tabla y styled-components para diseñar la tabla. Para instalar ambas bibliotecas, abra la terminal en el directorio de su proyecto y ejecute lo siguiente:

npm install styled-components react-table

Además, los usuarios pueden usar el CSS predeterminado de reactTable importándolo como importar "react-table/react-table.css";. Sin embargo, al usar eso, los usuarios pueden realizar cambios mínimos en el estilo de la tabla.

Por lo tanto, hemos decidido diseñar la tabla manualmente usando la biblioteca styled-component. Agrega estilo a todo el componente en React.

Primero, creamos la matriz de objetos de columnas y datos de tabla para representar en la pantalla y la pasamos al componente Tabla como accesorio. Además, hemos incrustado el componente Tabla dentro del componente Estilos para aplicar el CSS definido en los Estilos.

<Styles>
    <Table columns={columns} data={data} />
</Styles>

Después de eso, creamos el componente funcional Table y usamos useTable de react-table para obtener los estados y accesorios de las columnas y datos.

const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } = useTable({columns,data,});

Usamos la etiqueta <table> de HTML para crear el componente de representación y la etiqueta <thead> para crear el encabezado. Los headerGroups contienen todos los elementos de encabezado, y estamos iterando a través de cada elemento de encabezado usando el método .map() de JavaScript y creando el componente de encabezado personalizado.

A continuación, usamos getTableBodyProps y creamos las filas y columnas para el cuerpo de la tabla. Además, hemos utilizado la etiqueta <th> para crear un encabezado, la etiqueta <tr> para crear filas y la etiqueta <td> para crear columnas.

<table {...getTableProps()}>
    <thead>
        {headerGroups.map((singleHeader) => (
        // create table header
       ))}
    </thead>
    <tbody {...getTableBodyProps()}>
        {rows.map((tableRow, i) => {
            // create table row
        })}
      </tbody>
    </table>

Hemos inicializado la variable Estilos para diseñar el componente Tabla. Los usuarios pueden usar los componentes con estilo como se muestra a continuación.

const Styles = styled.div`
    // style for the component elements
`

El código de trabajo completo para el archivo App.js se proporciona a continuación.

Código de ejemplo:

//  import required libraries
import React from "react";
import styled from "styled-components";
import { useTable } from "react-table";
// creating the style component
const Styles = styled.div`
  // style for the body
  text-align: center;
  padding-left: 50px;
  padding-top: 50px;
  // style for the whole table
  table {
    border-spacing: 0;
    border: 0.2rem solid black;

    //  style for every column
    td {
      margin: 0;
      padding: 0.5rem;
      border-bottom: 0.1rem solid black;
      border-right: 0.1rem solid black;

      :last-child {
        border-right: 0;
      }
    }
    // style for every header
    th {
      padding: 0.5rem;
      border-bottom: 0.1rem dashed black;
      border-right: 0.1rem solid black;
    }
  }
`;

// function table creates the table from props and returns the table
function Table({ columns, data }) {
  // The useTable, returns the state and props from the header and table data
  const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } =
    useTable({
      columns,
      data,
    });

  // Creating the table component
  return (
    <table {...getTableProps()}>
      {/* creating the header */}
      <thead>
        {/* iterate through every header and create the single header using the <th> HTML tag. */}
        {headerGroups.map((singleHeader) => (
          <tr {...singleHeader.getHeaderGroupProps()}>
            {/* create a column for every single header */}
            {singleHeader.headers.map((singleColumn) => (
              <th {...singleColumn.getHeaderProps()}>
                {singleColumn.render("Header")}
              </th>
            ))}
          </tr>
        ))}
      </thead>
      {/* creating the table body */}
      <tbody {...getTableBodyProps()}>
        {/* iterate through every row of table */}
        {rows.map((tableRow, i) => {
          prepareRow(tableRow);
          return (
            // create table row
            <tr {...tableRow.getRowProps()}>
              {/* create table column for every table row */}
              {tableRow.cells.map((tableColumn) => {
                return (
                  <td {...tableColumn.getCellProps()}>
                    {tableColumn.render("Cell")}
                  </td>
                );
              })}
            </tr>
          );
        })}
      </tbody>
    </table>
  );
}

function App() {
  // header data
  const columns = [
    {
      Header: "Programming Langugage",
      accessor: "ProgrammingLangugage",
    },
    {
      Header: "Rating",
      accessor: "Rating",
    },
  ];
  //  table data
  const data = [
    {
      ProgrammingLangugage: "JavaScript",
      Rating: 8,
    },
    {
      ProgrammingLangugage: "Python",
      Rating: 7,
    },
    {
      ProgrammingLangugage: "C",
      Rating: 8,
    },
    {
      ProgrammingLangugage: "C++",
      Rating: 8,
    },
    {
      ProgrammingLangugage: "NodeJs",
      Rating: 9,
    },
    {
      ProgrammingLangugage: "MongoDB",
      Rating: 8,
    },
  ];

  return (
    // embedded the Table component inside the style component to apply style on the table
    <Styles>
      {/* passed columns and data as props in Table component */}
      <Table columns={columns} data={data} />
    </Styles>
  );
}
export default App;

Producción:

cambiar el estilo de encabezado de la tabla de reacción

Los usuarios pueden observar el borde discontinuo del encabezado en la salida. Además, pueden cambiar el estilo según sus requisitos.

Hemos creado el componente Tabla en un solo archivo, pero los usuarios pueden hacerlo en otro archivo y volverlo reutilizable.

Shubham Vora avatar Shubham Vora avatar

Shubham is a software developer interested in learning and writing about various technologies. He loves to help people by sharing vast knowledge about modern technologies via different platforms such as the DelftStack.com website.

LinkedIn GitHub

Artículo relacionado - React Table