Déclencher des réactions avec observeEvent()
Il arrive que vous souhaitiez effectuer une action en réponse à un événement. Par exemple, vous pourriez vouloir permettre à l’utilisateur de l’application de télécharger un tableau au format CSV lorsqu’il clique sur un bouton « Download ». Ou encore, vous pourriez vouloir afficher une notification ou une boîte de dialogue modale suite à un clic.
La fonction observeEvent() vous permet de faire cela. Elle accepte deux arguments :
- L’événement auquel vous voulez réagir.
- La fonction à appeler chaque fois que l’événement se produit.
Dans cet exercice, vous allez utiliser observeEvent() pour afficher une boîte de dialogue modale avec un texte d’aide lorsque l’utilisateur clique sur un bouton intitulé « Help ». Le texte d’aide a déjà été affecté à la variable bmi_help_text.
Cet exercice fait partie du cours
<cours>Créer des applications web avec Shiny en R</cours>Instructions de l’exercice
- UI :
- Ajoutez un bouton d’action nommé 'show_help', avec l’intitulé « Help ». Il se peut que vous deviez faire défiler la page ou réduire la console pour voir l’interface.
- Server :
- Décommentez le code
# showModal ... - Encapsulez
showModal(...)dansobserveEvent()afin que le texte d’aide s’affiche lorsqu’un utilisateur clique sur le bouton d’aide
- Décommentez le code
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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)