Adding Table RS to your project is simple:
-
Make sure your project is set up with Dioxus. Refer to the Dioxus Getting Started Guide for setup instructions.
-
Add the table-rs library to your dependencies by including it in your
Cargo.tomlfile:cargo add table-rs --features=dio
-
Import the
Tablecomponent into your Dioxus application.
Incorporating Table RS into your Dioxus app involves just a few steps:
-
Import the
Tablecomponent and types:use dioxus::prelude::*; use table_rs::dioxus::table::Table; use table_rs::dioxus::types::Column; use maplit::hashmap;
-
Use the
Tablecomponent in your Dioxus app:use dioxus::prelude::*; use table_rs::dioxus::table::Table; use table_rs::dioxus::types::Column; use maplit::hashmap; fn App() -> Element { let data = vec![ hashmap! { "name" => "Ferris".to_string(), "email" => "ferris@opensass.org".to_string() }, hashmap! { "name" => "Ferros".to_string(), "email" => "ferros@opensass.org".to_string() }, hashmap! { "name" => "Crab".to_string(), "email" => "crab@opensass.org".to_string() }, ]; let columns = vec![ Column { id: "name", header: "Name", sortable: true, ..Default::default() }, Column { id: "email", header: "Email", sortable: false, ..Default::default() }, ]; rsx! { Table { data: data, columns: columns, } } }
| Prop | Type | Description | Default |
|---|---|---|---|
data |
Vec<HashMap<&'static str, String>> |
The row data to render. | [] |
columns |
Vec<Column> |
Column definitions. | [] |
page_size |
usize |
Number of rows per page. | 10 |
loading |
bool |
Show loading state if true. | false |
paginate |
bool |
Enable pagination. | false |
search |
bool |
Enable global search input. | false |
classes |
TableClasses |
CSS class overrides. | Default |
styles |
HashMap<&'static str, &'static str> |
Inline style overrides. | {} |
texts |
TableTexts |
Text customization for UI labels. | Default |
| Prop | Type | Description | Default |
|---|---|---|---|
id |
&'static str |
Column key (used to fetch from row data). | "" |
header |
&'static str |
Display name in the table header. | "" |
sortable |
bool |
Allow sorting on this column. | false |
style |
Option<&'static str> |
Inline CSS for the header. | Some("padding: 8px; font-weight: 600; text-align: left;") |
class |
Option<&'static str> |
Optional class name for this column. | Some("table-header-cell") |
| Prop | Type | Description | Default |
|---|---|---|---|
container |
&'static str |
Outer container class. | "table-container" |
table |
&'static str |
Main table class. | "table" |
thead |
&'static str |
Table head (<thead>) class. |
"thead" |
tbody |
&'static str |
Table body (<tbody>) class. |
"tbody" |
row |
&'static str |
Row (<tr>) class. |
"tr" |
header_cell |
&'static str |
Header cell (<th>) class. |
"th" |
body_cell |
&'static str |
Body cell (<td>) class. |
"td" |
loading_row |
&'static str |
Row shown when loading. | "loading-row" |
empty_row |
&'static str |
Row shown when no data is available. | "empty-row" |
search_input |
&'static str |
Search input field class. | "search-input" |
pagination |
&'static str |
Pagination controls wrapper. | "pagination-controls" |
pagination_button |
&'static str |
Pagination buttons. | "pagination-button" |
| Prop | Type | Description | Default |
|---|---|---|---|
loading |
&'static str |
Text shown when loading. | "Loading..." |
empty |
&'static str |
Text when no data is present. | "No results found" |
search_placeholder |
&'static str |
Placeholder for search input. | "Search..." |
previous_button |
&'static str |
Label for previous page button. | "Previous" |
next_button |
&'static str |
Label for next page button. | "Next" |
page_indicator |
&'static str |
Format string for page indicator. | "Page {current} of {total}" |
+-------------------------------------------------------------+
| [container] | <-- class: "table-container"
| |
| +-----------------------------------------------------+ |
| | [search_input] | | <-- class: "search-input"
| | (optional search <input> element) | |
| +-----------------------------------------------------+ |
| |
| +-----------------------------------------------------+ |
| | [table] | | <-- class: "table"
| | +--------------------[thead]--------------------+ | | <-- class: "thead"
| | | Column Headers (e.g., Name, Email) | | |
| | +-----------------------------------------------+ | |
| | +--------------------[tbody]--------------------+ | | <-- class: "tbody"
| | | Data rows (from `data` prop, each row = <tr>)| | |
| | +-----------------------------------------------+ | |
| +-----------------------------------------------------+ |
| |
| +-----------------------------------------------------+ |
| | [pagination] | | <-- class: "pagination-controls"
| | Page selector / next-prev buttons (if enabled) | |
| +-----------------------------------------------------+ |
+-------------------------------------------------------------+- The
datamust match theidvalues defined in eachColumn. - The
searchprop enables input-based filtering across all columns. - Pagination is controlled using the
page_sizeandpaginateprops. - Sorting is column-specific via
sortable = trueandon_sort_column. - All style classes can be customized via
TableClasses. - All texts are configurable via
TableTexts. - The component handles loading and empty states out-of-the-box.
- You can inject additional per-column styling via
Column.styleandColumn.class.