Это именно то, что вы хотите, и они имеют в своих демонстрационных компонентах в Material-UI
Вам нужен метод, который обрабатывает события, когда пользователь нажимает на ячейки:
handleClick = (event, id, cell) => {
const { selected } = this.state;
const selectedCell = cell;
this.setState({ selected: selectedCell });
};
В этом случае выберите строку и добавьте ее в массив. Вам нужно добавить прослушиватель событий для каждого <TableCell />
, чтобы выбрать ячейки вместо строк
<TableBody>
{data
.sort(getSorting(order, orderBy))
.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
.map(n => {
const isSelected = this.isSelected(n.id);
return (
<TableRow
hover
role="checkbox"
aria-checked={isSelected}
tabIndex={-1}
key={n.id}
selected={isSelected}
>
<TableCell padding="checkbox">
<Checkbox checked={isSelected} />
</TableCell>
<TableCell component="th" scope="row"
padding="none"
onClick={event => this.handleClick(event, n.name)}
>
{n.name}
</TableCell>
<TableCell numeric
onClick={event => this.handleClick(event, n.calories)}>
{n.calories}
</TableCell>
<TableCell numeric
onClick={event => this.handleClick(event, n.id, n.fat)}>
{n.fat}</TableCell>
<TableCell numeric
onClick={event => this.handleClick(event, n.id, n.carbs)}>
{n.carbs}</TableCell>
<TableCell numeric
onClick={event => this.handleClick(event, n.id, n.protein)}>{n.protein}</TableCell>
</TableRow>
);
})}
{emptyRows > 0 && (
<TableRow style={{ height: 49 * emptyRows }}>
<TableCell colSpan={6} />
</TableRow>
)}
</TableBody>
А если вы хотите, чтобы пользователь просто выбрал одинячейку в каждом клике, просто удалите часть массива кода и просто выберите этот конкретный идентификатор и назначьте его переменной