Bắt đầu ngayBắt đầu miễn phí

Kích hoạt phản ứng với observeEvent()

Đôi khi bạn muốn thực hiện một hành động để phản hồi lại một sự kiện. Ví dụ, bạn có thể muốn cho phép người dùng ứng dụng tải xuống một bảng dưới dạng tệp CSV khi họ bấm vào nút "Download". Hoặc bạn có thể muốn hiển thị một thông báo hoặc hộp thoại modal khi có một lần bấm.

Hàm observeEvent() cho phép bạn làm điều này. Hàm nhận hai đối số:

  1. Sự kiện bạn muốn phản hồi.
  2. Hàm sẽ được gọi mỗi khi sự kiện xảy ra.

Trong bài tập này, bạn sẽ dùng observeEvent() để hiển thị một hộp thoại modal với văn bản trợ giúp khi người dùng bấm vào nút có nhãn "Help". Văn bản trợ giúp đã được gán cho biến bmi_help_text.

Bài tập này là một phần của khóa học

Xây dựng ứng dụng web với Shiny trong R

Xem khóa học

Hướng dẫn bài tập

  • UI:
    • Thêm một action button tên 'show_help', có nhãn "Help". Bạn có thể cần cuộn xuống hoặc thu gọn bảng điều khiển để xem UI.
  • Server:
    • Bỏ comment đoạn mã # showModal ...
    • Bao showModal(...) trong observeEvent() để văn bản trợ giúp được hiển thị khi người dùng bấm vào nút trợ giúp

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

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)
Chỉnh sửa và Chạy Mã