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
columnVisibilitytanto ainitialStatecomo astate, la inicialización destatetendrá prioridad einitialStateserá ignorado. No proporcionescolumnVisibilitytanto ainitialStatecomo astate, 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 tieneenableHidingestablecido enfalse.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étodocolumn.toggleVisibilitya 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.