Skip to main content

Guía de Visibilidad de Columnas

Ejemplos​

¿Quieres ir directamente a la implementación? Echa un vistazo a estos ejemplos:

Otros Ejemplos​

API​

API de visibilidad de columnas

Guía de Visibilidad de Columnas​

La funcionalidad de visibilidad de columnas permite que las columnas de una tabla se oculten o muestren dinámicamente. En versiones anteriores de react-table, esta característica era una propiedad estática en una columna, pero en la v8, existe un estado columnVisibility dedicado y APIs para gestionar la visibilidad de las columnas dinámicamente.

Estado de Visibilidad de Columnas​

El estado columnVisibility es un mapa de IDs de columna a valores booleanos. Una columna estará oculta si su ID está presente en el mapa y el valor es false. Si el ID de la columna no está presente en el mapa, o el valor es true, la columna se mostrará.

const [columnVisibility, setColumnVisibility] = useState({
columnId1: true,
columnId2: false, //ocultar esta columna por defecto
columnId3: true,
});

const table = useReactTable({
//...
state: {
columnVisibility,
//...
},
onColumnVisibilityChange: setColumnVisibility,
});

Alternativamente, si no necesitas gestionar el estado de visibilidad de las columnas fuera de la tabla, aún puedes establecer el estado inicial de visibilidad de columnas por defecto utilizando la opción initialState.

Nota: Si se proporciona columnVisibility tanto a initialState como a state, la inicialización de state tendrá prioridad e initialState será ignorado. No proporciones columnVisibility tanto a initialState como a state, solo a uno u otro.

const table = useReactTable({
//...
initialState: {
columnVisibility: {
columnId1: true,
columnId2: false, //ocultar esta columna por defecto
columnId3: true,
},
//...
},
});

Deshabilitar Ocultar Columnas​

Por defecto, todas las columnas se pueden ocultar o mostrar. Si quieres evitar que ciertas columnas se oculten, debes establecer la opción de columna enableHiding en false para esas columnas.

const columns = [
{
header: "ID",
accessorKey: "id",
enableHiding: false, // deshabilitar ocultamiento para esta columna
},
{
header: "Nombre",
accessor: "name", // se puede ocultar
},
];

APIs para alternar la visibilidad de las columnas​

Existen varios métodos de la API de columna que son útiles para renderizar interruptores de visibilidad de columnas en la interfaz de usuario.

  • column.getCanHide - Útil para deshabilitar el interruptor de visibilidad para una columna que tiene enableHiding establecido en false.
  • column.getIsVisible - Útil para establecer el estado inicial del interruptor de visibilidad.
  • column.toggleVisibility - Útil para alternar la visibilidad de una columna.
  • column.getToggleVisibilityHandler - Atajo para conectar el método column.toggleVisibility a un controlador de eventos de la interfaz de usuario.
{
table.getAllColumns().map((column) => (
<label key={column.id}>
<input
checked={column.getIsVisible()}
disabled={!column.getCanHide()}
onChange={column.getToggleVisibilityHandler()}
type="checkbox"
/>
{column.columnDef.header}
</label>
));
}

APIs de tabla conscientes de la visibilidad de columnas​

Cuando renderizas las celdas de tu encabezado, cuerpo y pie de página, hay muchas opciones de API disponibles. Es posible que veas APIs como table.getAllLeafColumns y row.getAllCells, pero si usas estas APIs, no tendrán en cuenta la visibilidad de las columnas. En su lugar, necesitas usar las variantes "visibles" de estas APIs, como table.getVisibleLeafColumns y row.getVisibleCells.

<table>
<thead>
<tr>
{table.getVisibleLeafColumns().map((column) => ( // tiene en cuenta la visibilidad de las columnas
//
))}
</tr>
</thead>
<tbody>
{table.getRowModel().rows.map((row) => (
<tr key={row.id}>
{row.getVisibleCells().map((cell) => ( // tiene en cuenta la visibilidad de las columnas
//
))}
</tr>
))}
</tbody>
</table>

Si estás utilizando las APIs de Header Group, estas ya tendrán en cuenta la visibilidad de las columnas.