Reaktionen mit observeEvent() auslösen
Manchmal möchtest du eine Aktion als Reaktion auf ein Ereignis ausführen. Zum Beispiel könntest du Nutzerinnen und Nutzern erlauben, beim Klick auf einen „Download“-Button eine Tabelle als CSV-Datei herunterzuladen. Oder du möchtest als Reaktion auf einen Klick eine Benachrichtigung oder einen modalen Dialog anzeigen.
Die Funktion observeEvent() ermöglicht dir genau das. Sie erwartet zwei Argumente:
- Das Ereignis, auf das du reagieren willst.
- Die Funktion, die aufgerufen werden soll, wenn das Ereignis eintritt.
In dieser Übung verwendest du observeEvent(), um beim Klick auf einen Button mit der Beschriftung „Help“ einen modalen Dialog mit Hilfetext anzuzeigen. Der Hilfetext wurde bereits der Variablen bmi_help_text zugewiesen.
Diese Übung ist Teil des Kurses
Webanwendungen mit Shiny in R entwickeln
Anleitung zur Übung
- UI:
- Füge einen Action-Button mit dem Namen 'show_help' und der Beschriftung „Help“ hinzu. Du musst eventuell nach unten scrollen oder die Konsole einklappen, um die UI zu sehen.
- Server:
- Hebe die Auskommentierung von
# showModal ...auf. - Wickle
showModal(...)inobserveEvent()ein, sodass der Hilfetext angezeigt wird, wenn auf den Help-Button geklickt wird.
- Hebe die Auskommentierung von
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
ui <- fluidPage(
titlePanel('BMI Calculator'),
sidebarLayout(
sidebarPanel(
textInput('name', 'Enter your name'),
numericInput('height', 'Enter your height in meters', 1.5, 1, 2),
numericInput('weight', 'Enter your weight in Kilograms', 60, 45, 120),
actionButton("show_bmi", "Show BMI")
# CODE BELOW: Add an action button named "show_help"
),
mainPanel(
textOutput("bmi")
)
)
)
server <- function(input, output, session) {
# MODIFY CODE BELOW: Wrap in observeEvent() so the help text
# is displayed when a user clicks on the Help button.
# Display a modal dialog with bmi_help_text
# MODIFY CODE BELOW: Uncomment code
# showModal(modalDialog(bmi_help_text))
rv_bmi <- eventReactive(input$show_bmi, {
input$weight/(input$height^2)
})
output$bmi <- renderText({
bmi <- rv_bmi()
paste("Hi", input$name, ". Your BMI is", round(bmi, 1))
})
}
shinyApp(ui = ui, server = server)