CommencerCommencez gratuitement

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 :

  1. L’événement auquel vous voulez réagir.
  2. 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>
Voir le 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(...) dans observeEvent() afin que le texte d’aide s’affiche lorsqu’un utilisateur clique sur le bouton d’aide

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)
Modifier et exécuter le code