R

ReflexKR

Reflex-Dokumentation

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

Die Komponentenwerkstatt: Reflex' 100 Bibliotheksbausteine
Tabellen und Datengrids

Data Table

rx.data_table

Offizielle 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,
)

Props ausprobieren

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,
)
search sucht in allen Spalten nach Teilstrings, ohne auf Groß- und Kleinschreibung zu achten; pagination teilt standardmäßig in Seiten zu 10 Zeilen. Auch Suchergebnisse werden in Seiten aufgeteilt.
PropWerteVerwendung
dataListe von Listen, State-Wert, pandas DataFrameDie anzuzeigenden Zeilen
columnsListe von SpaltennamenSpaltenüberschriften. Bei Listendaten Pflicht, nicht zusammen mit einem DataFrame verwenden
searchTrue / FalseSuchfeld oberhalb
sortTrue / FalseAuf- und absteigend sortieren per Klick auf die Spaltenüberschrift
paginationTrue / False oder dictSeitenumbruch. Mit {"limit": 5} legst du die Zeilen pro Seite fest
resizableTrue / FalseSpaltenbreite per Ziehen anpassen

Eigene Events gibt es nicht. Gezeichnet wird diese Tabelle mit Grid.js.

Seitenumbruch

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},
)

Daten aus dem State anzeigen

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%",
)

In einer festen Reihenfolge anzeigen

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,
)

Ein pandas DataFrame übergeben

Ü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")

Auftrag erledigt

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.

← Zurück

Tabellen und Datengrids · Table

Weiter →

Tabellen und Datengrids · Data Editor

Über neue Lektionen informiert werden

Wir schicken dir eine E-Mail, wenn dieser Kurs neue Lektionen bekommt oder ein Folgekurs erscheint.

Erhoben: deine E-Mail-Adresse · Zweck: Hinweise auf neue Lektionen oder den Start dieses Kurses · Speicherdauer: bis du die Löschung verlangst. Keine andere Nutzung, keine Weitergabe. Antworte einfach auf eine Benachrichtigung, dann löschen wir sie sofort.

Fragen & Antworten

Frag alles zu dieser Lektion. Fragen aus allen Sprachversionen dieser Seite erscheinen hier gemeinsam.

Wird als reiner Text angezeigt, ohne Links oder Formatierung.

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
한국어English日本語简体中文EspañolDeutsch

© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0

Built with Reflex