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
<Kurs>Webanwendungen mit Shiny in R entwickeln</Kurs>Übungsanweisungen
- 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 praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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)