Zacznij terazZacznij za darmo

Wyzwalanie reakcji za pomocą observeEvent()

Czasem chcesz wykonać jakąś akcję w odpowiedzi na określone zdarzenie. Na przykład możesz umożliwić użytkownikowi pobranie tabeli jako pliku CSV po kliknięciu przycisku „Pobierz". Możesz też wyświetlić powiadomienie lub okno modalne w reakcji na kliknięcie.

Funkcja observeEvent() pozwala to osiągnąć. Przyjmuje dwa argumenty:

  1. Zdarzenie, na które chcesz reagować.
  2. Funkcję, która ma być wywołana za każdym razem, gdy to zdarzenie nastąpi.

W tym ćwiczeniu użyjesz observeEvent(), aby wyświetlić okno modalne z tekstem pomocy, gdy użytkownik kliknie przycisk „Help". Tekst pomocy jest już przypisany do zmiennej bmi_help_text.

To ćwiczenie jest częścią kursu

Tworzenie aplikacji internetowych z Shiny w R

Zobacz kurs

Instrukcje do ćwiczenia

  • UI:
    • Dodaj przycisk akcji o nazwie 'show_help' z etykietą „Help". Być może trzeba będzie przewinąć stronę w dół lub zwinąć konsolę, aby zobaczyć UI.
  • Server:
    • Usuń komentarz z kodu # showModal ...
    • Owiń showModal(...) funkcją observeEvent() tak, aby tekst pomocy był wyświetlany po kliknięciu przycisku pomocy przez użytkownika

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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)
Edytuj i uruchom kod