Attiva reazioni con observeEvent()
A volte vuoi eseguire un'azione in risposta a un evento. Per esempio, potresti voler permettere all'utente dell'app di scaricare una tabella come file CSV quando clicca su un pulsante "Download". Oppure potresti voler mostrare una notifica o una finestra modale in risposta a un clic.
La funzione observeEvent() ti permette di farlo. Accetta due argomenti:
- L'evento a cui vuoi rispondere.
- La funzione che deve essere chiamata ogni volta che l'evento si verifica.
In questo esercizio userai observeEvent() per mostrare una finestra modale con un testo di aiuto quando l'utente clicca su un pulsante etichettato "Help". Il testo di aiuto è
già stato assegnato alla variabile bmi_help_text.
Questo esercizio fa parte del corso
Creare applicazioni web con Shiny in R
Istruzioni dell'esercizio
- UI:
- Aggiungi un pulsante di azione chiamato 'show_help', etichettato "Help". Potresti dover scorrere verso il basso o comprimere la console per vedere l'interfaccia.
- Server:
- Decommenta il codice
# showModal ... - Racchiudi
showModal(...)inobserveEvent()in modo che il testo di aiuto venga mostrato quando un utente clicca sul pulsante di aiuto
- Decommenta il codice
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
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)