Die Komponentenwerkstatt: Reflex' 100 Bibliotheksbausteine
·
Kursüberblick
Layout
·
Box
·
Flex
·
Stack
·
Grid
·
Container
·
Section
·
Center
·
Spacer
·
Separator
·
Card
·
Inset
·
Aspect Ratio
·
Fragment
Typografie
·
Text
·
Heading
·
Link
·
Code
·
Markdown
·
Blockquote
·
Quote
·
Strong
·
Em
·
Kbd
Formulare
·
Button
·
Input
·
Text Area
·
Checkbox
·
Switch
·
Radio Group
·
Select
·
Slider
·
Form
·
Upload
Datenanzeige
·
Badge
·
Avatar
·
Icon
·
Callout
·
List
·
Data List
·
Code Block
·
Progress
·
Spinner
·
Scroll Area
·
Moment
Auf- und Zuklappen
·
Tabs
·
Accordion
·
Segmented Control
Overlays
·
Tooltip
·
Popover
·
Hover Card
·
Dialog
·
Alert Dialog
·
Drawer
·
Dropdown Menu
·
Context Menu
·
Toast
Dynamisches Rendern
·
Cond
·
Match
·
Foreach
·
Auto Scroll
Medien
·
Image
·
Audio
·
Video
Tabellen und Datengrids
·
Table
·
Data Table
·
Data Editor
Diagramme
·
Area Chart
·
Bar Chart
·
Line Chart
·
Composed Chart
·
Pie Chart
·
Radar Chart
·
Radial Bar Chart
·
Scatter Chart
·
Funnel Chart
·
Treemap
·
Sankey Chart
·
Error Bar
Diagrammbausteine
·
Axis
·
Cartesian Grid
·
Chart Tooltip
·
Legend
·
Label
·
Reference
·
Brush
Andere Diagrammbibliotheken
·
Plotly
·
Pyplot
HTML-Elemente
·
HTML
·
HTML Text
·
HTML Layout
·
HTML Forms
·
HTML Media
·
HTML Tables
·
SVG
Weitere Werkzeuge
·
Theme
·
Skeleton
·
Clipboard
·
Html Embed
·
Script
·
Memo
rx.data_tableOffizielle Doku
Werkstattauftrag
Zeig den Lagerbestand der Artikel als Tabelle. Kunden sollen nach Namen suchen, nach Preis sortieren und in Fünferschritten blättern können.
rx.data_table ist eine Tabelle, in der Suchen, Sortieren und Seitenumbruch von Anfang an eingebaut sind. Du übergibst nur Daten und Spaltennamen; damit eignet sie sich, um feststehende Daten schnell darzustellen. Willst du Buttons in Zellen setzen oder das Aussehen frei gestalten, nimm Table; sollen Nutzer Zellen direkt bearbeiten, nimm Data Editor.
An data übergibst du eine Liste der Zeilen (eine Liste von Listen), an columns die Liste der Spaltennamen. Bei Listendaten ist columns Pflicht.
rx.data_table(
data=[
["Avery Bradley", "6-2", 25.0],
["Jae Crowder", "6-6", 25.0],
["John Holland", "6-5", 27.0],
["R.J. Hunter", "6-5", 22.0],
["Jonas Jerebko", "6-10", 29.0],
["Amir Johnson", "6-9", 29.0],
["Jordan Mickey", "6-8", 21.0],
["Kelly Olynyk", "7-0", 25.0],
["Terry Rozier", "6-2", 22.0],
["Marcus Smart", "6-4", 22.0],
],
columns=["Name", "Height", "Age"],
pagination=True,
search=True,
sort=True,
)Vier Funktionen lassen sich ein- und ausschalten. Sortiert wird per Klick auf eine Spaltenüberschrift, die Breite ändert man durch Ziehen am Rand der Spaltenüberschrift.
Props ausprobieren
search
sort
pagination
resizable
rx.data_table(
data=[
["Avery Bradley", "Boston", 25],
["Jae Crowder", "Boston", 25],
["John Holland", "Boston", 27],
["Jonas Jerebko", "Detroit", 29],
["Amir Johnson", "Toronto", 29],
["Kelly Olynyk", "Miami", 25],
["Terry Rozier", "Charlotte", 22],
["Marcus Smart", "Memphis", 22],
["Isaiah Thomas", "Denver", 27],
["Evan Turner", "Portland", 27],
["James Young", "Boston", 20],
["Tyler Zeller", "Milwaukee", 26],
],
columns=["Name", "Team", "Age"],
search=True,
sort=True,
pagination=True,
resizable=False,
)| Prop | Werte | Verwendung |
|---|---|---|
data | Liste von Listen, State-Wert, pandas DataFrame | Die anzuzeigenden Zeilen |
columns | Liste von Spaltennamen | Spaltenüberschriften. Bei Listendaten Pflicht, nicht zusammen mit einem DataFrame verwenden |
search | True / False | Suchfeld oberhalb |
sort | True / False | Auf- und absteigend sortieren per Klick auf die Spaltenüberschrift |
pagination | True / False oder dict | Seitenumbruch. Mit {"limit": 5} legst du die Zeilen pro Seite fest |
resizable | True / False | Spaltenbreite per Ziehen anpassen |
Eigene Events gibt es nicht. Gezeichnet wird diese Tabelle mit Grid.js.
pagination=True teilt in Seiten zu 10 Zeilen. Für eine andere Zeilenzahl pro Seite übergibst du pagination ein dict {"limit": zeilen}. Dieses dict wird unverändert als Seiteneinstellung an Grid.js weitergegeben.
rx.data_table(
data=[[f"Order #{1000 + i}", ["Paid", "Shipped", "Refunded"][i % 3], 12 + i * 3] for i in range(12)],
columns=["Order", "Status", "Total"],
pagination={"limit": 4},
)Liegen Daten und Spaltennamen im State, wird die Tabelle jedes Mal neu gezeichnet, wenn ein Handler die Werte ändert. Klicke unten auf Add player, und es kommt eine Zeile hinzu.
class DataTableTeamState(rx.State):
data: list[list[str]] = [
["Lionel", "Messi", "Argentina"],
["Cristiano", "Ronaldo", "Portugal"],
["Neymar", "Jr", "Brazil"],
["Kylian", "Mbappé", "France"],
]
columns: list[str] = ["First Name", "Last Name", "Country"]
@rx.event
def add_player(self):
self.data = self.data + [["Son", "Heung-min", "Korea"]]
@rx.event
def reset_players(self):
self.data = self.data[:4]
rx.vstack(
rx.hstack(
rx.button("Add player", on_click=DataTableTeamState.add_player, size="1"),
rx.button("Reset", on_click=DataTableTeamState.reset_players, size="1", variant="soft"),
),
rx.data_table(
data=DataTableTeamState.data,
columns=DataTableTeamState.columns,
pagination=True,
search=True,
sort=True,
),
width="100%",
)Soll die anfängliche Reihenfolge feststehen, machst du die sortierte Liste zu einer berechneten Variable und übergibst sie an data. Bei einer berechneten Variable musst du den Rückgabetyp (-> list[list[str]]) unbedingt angeben. Fehlt er, kennt die Tabelle die Form der Daten nicht, und es kommt zu einem Fehler. Mit zusätzlichem sort=True können Nutzer nach einer anderen Spalte umsortieren.
class DataTableSortedState(rx.State):
rows: list[list[str]] = [
["Pear", "Fruit"],
["Carrot", "Vegetable"],
["Apple", "Fruit"],
["Basil", "Herb"],
]
@rx.var
def sorted_rows(self) -> list[list[str]]:
return sorted(self.rows, key=lambda row: row[0])
rx.data_table(
data=DataTableSortedState.sorted_rows,
columns=["Name", "Kind"],
sort=True,
)Übergibst du an data ein pandas DataFrame, kommen die Spaltennamen aus dem DataFrame; columns lässt du dann weg (zusammen angegeben, gibt es einen Fehler). In der Umgebung dieses Kurses ist pandas nicht installiert, daher zeigen wir es nur als Code. Wer es selbst ausprobieren will, muss pandas installieren.
import pandas as pd
nba_data = pd.read_csv("data/nba.csv")
def index():
return rx.data_table(
data=nba_data[["Name", "Height", "Age"]],
pagination=True,
search=True,
sort=True,
)
class TableState(rx.State):
data: pd.DataFrame = pd.read_csv("data/nba.csv")
@rx.var
def sorted_data(self) -> pd.DataFrame:
return self.data.sort_values("Name")Für den Lagerbestand schalten wir Suche, Sortierung und Spaltenbreiten-Anpassung ein und setzen pagination={"limit": 5}, damit in Fünferschritten geblättert wird. Die Preisspalte muss aus Zahlen bestehen, damit numerisch sortiert wird.
rx.data_table(
data=[
["Desk lamp", "Lighting", 39, "In stock"],
["Office chair", "Furniture", 189, "Low"],
["Monitor arm", "Accessories", 79, "In stock"],
["Standing desk", "Furniture", 449, "Sold out"],
["Cable tray", "Accessories", 25, "In stock"],
["Floor lamp", "Lighting", 89, "Low"],
["Bookshelf", "Furniture", 159, "In stock"],
["Footrest", "Accessories", 35, "In stock"],
["LED strip", "Lighting", 19, "Sold out"],
],
columns=["Product", "Category", "Price ($)", "Stock"],
search=True,
sort=True,
pagination={"limit": 5},
resizable=True,
)Werkstattnotizen
rx.data_table(data=Liste von Listen, columns=Spaltennamen) – mehr braucht es nicht.
search · sort · pagination · resizable ein- und ausschalten. Mit pagination={"limit": n} die Zeilenzahl festlegen.
Ein übergebener State-Wert wird bei jeder Änderung neu gezeichnet. Bei berechneten Variablen unbedingt den Rückgabetyp angeben.
Bei einem DataFrame kein columns angeben (pandas muss installiert sein).
Komponenten in Zellen oder eigenes Aussehen: rx.table. Bearbeiten: rx.data_editor.
Über neue Lektionen informiert werden
Wir schicken dir eine E-Mail, wenn dieser Kurs neue Lektionen bekommt oder ein Folgekurs erscheint.
R
ReflexKR
Python und Reflex zum Anfassen. Alle Beispiele wurden mit Reflex 0.10.0 ausgeführt und geprüft.
ReflexKR ist kostenlos und ohne Werbebanner. Wenn es dir geholfen hat, kannst du es mit einem Kaffee unterstützen. ☕ Spendier uns einen Kaffee
Hinweis zu Affiliate-Links© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0
Fragen & Antworten
Frag alles zu dieser Lektion. Fragen aus allen Sprachversionen dieser Seite erscheinen hier gemeinsam.