Kom igångKom igång gratis

Utlös reaktioner med observeEvent()

Ibland vill du utföra en åtgärd som svar på en händelse. Du kanske vill låta användaren ladda ned en tabell som en CSV-fil när hen klickar på en "Ladda ned"-knapp, eller visa ett meddelande eller en modal dialog som svar på ett klick.

Funktionen observeEvent() gör detta möjligt. Den tar emot två argument:

  1. Den händelse du vill reagera på.
  2. Funktionen som ska anropas varje gång händelsen inträffar.

I den här övningen använder du observeEvent() för att visa en modal dialog med hjälptext när användaren klickar på en knapp märkt "Help". Hjälptexten har redan tilldelats variabeln bmi_help_text.

Den här övningen är en del av kursen

Bygg webbapplikationer med Shiny i R

Visa kurs

Övningsinstruktioner

  • Gränssnitt (UI):
    • Lägg till en åtgärdsknapp med namnet 'show_help' och etiketten "Help". Du kan behöva scrolla ned eller minimera konsolen för att se gränssnittet.
  • Server:
    • Avkommentera raden # showModal ...
    • Omslut showModal(...) i observeEvent() så att hjälptexten visas när användaren klickar på hjälpknappen

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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)
Redigera och kör kod