Row actions
Provide renderRowActions to add a trailing actions column. It receives { row, table } and returns whatever controls you need — for example a delete button.
Row actions
ID | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Ava | Thompson | Owner | Engineering | active | 22 | $45,000 | Jan 2, 2023 | 0% | |||
| Liam | Nguyen | Admin | Marketing | inactive | 25 | $47,137 | Jan 13, 2023 | 9% | |||
| Noah | Silva | Editor | Design | pending | 28 | $49,274 | Jan 24, 2023 | 18% | |||
| Emma | Carter | Viewer | Sales | active | 31 | $51,411 | Feb 4, 2023 | 27% | |||
| Olivia | Rossi | Owner | Support | inactive | 34 | $53,548 | Feb 15, 2023 | 36% | |||
| William | Walker | Admin | Engineering | pending | 37 | $55,685 | Feb 26, 2023 | 45% | |||
| Sophia | Patel | Editor | Marketing | active | 40 | $57,822 | Mar 9, 2023 | 54% | |||
| James | Muller | Viewer | Design | inactive | 43 | $59,959 | Mar 20, 2023 | 63% | |||
| Isabella | Park | Owner | Sales | pending | 46 | $62,096 | Mar 31, 2023 | 72% | |||
| Lucas | Reyes | Admin | Support | active | 49 | $64,233 | Apr 11, 2023 | 81% | |||
| $4,120,536 |
Rows per page
1–10 of 48
Usage
const table = useDataTable({
data,
columns,
getRowId: (row) => row.id,
renderRowActions: ({ row }) => (
<Button
variant="ghost"
size="icon"
onClick={() =>
setData((prev) => prev.filter((r) => r.id !== row.original.id))
}
>
<RiDeleteBinLine />
<span className="sr-only">Delete</span>
</Button>
),
})
return <DataTable table={table} />
Combine with editing
Row actions sit alongside editing controls — wire up an edit button here to start row editing programmatically.
As a menu
For a compact kebab menu instead of inline buttons, use renderRowActionMenuItems. It returns the menu items (e.g. DropdownMenuItems) rendered inside an auto-injected dropdown in the actions column. Both slots can be combined — inline controls plus a menu.
import { DropdownMenuItem } from "@/components/ui/dropdown-menu"
const table = useDataTable({
data,
columns,
getRowId: (row) => row.id,
renderRowActionMenuItems: ({ row, table }) => (
<>
<DropdownMenuItem onClick={() => table.cnTable.beginRowEdit(row)}>
Edit
</DropdownMenuItem>
<DropdownMenuItem variant="destructive" onClick={() => remove(row.id)}>
Delete
</DropdownMenuItem>
</>
),
})
Positioning the column
The actions column trails the data columns by default. Set positionActionsColumn: "first" to move it to the leading edge.
useDataTable({
renderRowActions: ({ row }) => <RowMenu row={row} />,
positionActionsColumn: "first", // "first" | "last"
})