Хук useTableCell предназначен для управления поведением
и доступностью отдельных ячеек таблицы в компонентах React, построенных
с использованием библиотеки React Aria. Он обеспечивает правильное
взаимодействие с клавиатурой, фокусом и технологией чтения с экрана,
соответствуя стандартам ARIA для таблиц.
import { useTableCell } from '@react-aria/table';
import { useTableState } from '@react-stately/table';
import { Table } from '@react-stately/table';
Для корректной работы useTableCell требуется состояние
таблицы (tableState) и объект информации о конкретной
ячейке (node).
const cellProps = useTableCell({ node, column }, state);
TableNode,
содержащий данные и метаданные ячейки.useTableState.Хук возвращает объект с свойствами, которые необходимо развернуть на элемент ячейки:
<td {...cellProps}>
{node.rendered}
</td>
useTableCellХук возвращает следующие ключевые свойства:
cell или gridcell).function TableCell({ node, column, state }) {
const { cellProps } = useTableCell({ node, column }, state);
return (
<td {...cellProps}>
{node.rendered}
</td>
);
}
function ExampleTable() {
const state = useTableState({
columns: ['Name', 'Age', 'Location'],
items: [
{ id: 1, Name: 'Alice', Age: 25, Location: 'NY' },
{ id: 2, Name: 'Bob', Age: 30, Location: 'LA' }
]
});
return (
<table>
<thead>
<tr>
{state.collection.columns.map(column => (
<th key={column.key}>{column.rendered}</th>
))}
</tr>
</thead>
<tbody>
{state.collection.rows.map(row => (
<tr key={row.key}>
{row.childNodes.map(cell => (
<TableCell key={cell.key} node={cell} column={cell.column} state={state} />
))}
</tr>
))}
</tbody>
</table>
);
}
В этом примере каждая ячейка получает свойства, обеспечивающие доступность и корректное поведение при навигации с клавиатуры.
useTableCell интегрируется с состоянием таблицы и
позволяет:
aria-selected.const { cellProps } = useTableCell({ node, column }, state);
return (
<td
{...cellProps}
style={{
outline: cellProps.tabIndex === 0 ? '2px solid blue' : 'none'
}}
>
{node.rendered}
</td>
);
Такой подход гарантирует, что клавиатурная навигация всегда видима и логична.
useTableCell часто используется совместно с:
useTableRow – для управления
поведением строки и правильной структуры ARIA.useTable – для общей конфигурации
таблицы и управления состоянием.useTableHeader – если ячейка находится
в шапке таблицы.Это обеспечивает полную согласованность ARIA-ролей и индексов, что критично для экранных ридеров.
node и state в
useTableCell.aria-selected и
стилизовать выделенные ячейки.tabIndex выставляется динамически.cellProps на корневой элемент, чтобы сохранить
доступность.Использование useTableCell делает таблицы полностью
доступными, совместимыми с клавиатурой и технологиями чтения с экрана,
что критично для корпоративных приложений и сложных дашбордов.