Reageren triggeren met observeEvent()
Soms wil je een actie uitvoeren als reactie op een gebeurtenis. Zo kun je bijvoorbeeld de gebruiker een tabel als CSV-bestand laten downloaden wanneer die op een knop "Download" klikt. Of je wilt een melding of modaal dialoogvenster tonen als reactie op een klik.
De functie observeEvent() maakt dit mogelijk. Die accepteert twee argumenten:
- De gebeurtenis waarop je wilt reageren.
- De functie die moet worden aangeroepen wanneer de gebeurtenis optreedt.
In deze oefening gebruik je observeEvent() om een modaal dialoogvenster met helptekst te tonen wanneer de gebruiker op een knop met het label "Help" klikt. De helptekst is
al toegewezen aan de variabele bmi_help_text.
Deze oefening maakt deel uit van de cursus
Webapplicaties bouwen met Shiny in R
Oefeninstructies
- UI:
- Voeg een actiekop genaamd 'show_help' toe, met het label "Help". Mogelijk moet je naar beneden scrollen of de console inklappen om de UI te zien.
- Server:
- Haal het commentaar weg bij de code
# showModal ... - Pak
showModal(...)inobserveEvent()zodat de help- tekst wordt getoond wanneer een gebruiker op de helpknop klikt
- Haal het commentaar weg bij de code
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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)