08. Inputs And User Actions¶
Learning Goal¶
Use input components safely so user-provided values become useful app state.
Inputs Are Controlled¶
A controlled input receives its current value from state and sends changes back through an event.
query, set_query = db.use_state("")
db.Input(
name="query",
label="Search",
value=query,
on_change=set_query,
)
Select¶
layer, set_layer = db.use_state("all")
db.Select(
name="layer",
label="Layer",
value=layer,
options=[
{"label": "All", "value": "all"},
{"label": "Bronze", "value": "bronze"},
{"label": "Silver", "value": "silver"},
{"label": "Gold", "value": "gold"},
],
on_change=set_layer,
)
Checkbox¶
urgent_only, set_urgent_only = db.use_state(False)
db.Checkbox(
name="urgent",
label="Only show urgent items",
checked=urgent_only,
on_change=set_urgent_only,
)
Slider¶
min_success, set_min_success = db.use_state(95.0)
db.Slider(
name="min_success",
label=f"Minimum success: {min_success:.1f}%",
min=90,
max=100,
step=0.1,
value=min_success,
on_change=set_min_success,
)
Date Range¶
window, set_window = db.use_state({"start": "2026-04-01", "end": "2026-04-07"})
db.DateRangePicker(
name="window",
label="Run window",
start=window["start"],
end=window["end"],
on_change=set_window,
)
Multi Select¶
layers, set_layers = db.use_state(["bronze", "silver"])
db.MultiSelect(
name="layers",
label="Layers",
values=layers,
options=[
{"label": "Bronze", "value": "bronze"},
{"label": "Silver", "value": "silver"},
{"label": "Gold", "value": "gold"},
],
on_change=set_layers,
)
Chat Input¶
prompt, set_prompt = db.use_state("")
answer, set_answer = db.use_state("Ask a question.")
db.ChatInput(
value=prompt,
on_change=set_prompt,
on_submit=lambda text: set_answer(f"You asked: {text}"),
)
Common Mistakes¶
- Missing
nameon inputs used in forms. - Treating slider values as strings when your logic expects numbers.
- Letting input state and displayed values drift apart.
- Forgetting that
DateRangePickerreturns a dictionary. - Forgetting that
MultiSelectreturns a list.
Exercise¶
Build a control panel with:
- search input
- layer select
- urgent checkbox
- success-rate slider
- date range picker
Show the current values below the controls.
Checkpoint¶
You should be able to collect user input, store it in state, and use it to drive UI.