Trì hoãn phản ứng với eventReactive()
Khung lập trình phản ứng của Shiny được thiết kế sao cho bất kỳ thay đổi nào ở input đều tự động cập nhật các output phụ thuộc vào nó. Trong một số tình huống, chúng ta có thể muốn kiểm soát rõ ràng tác nhân kích hoạt việc cập nhật.
Hàm eventReactive() được dùng để tính một giá trị phản ứng (reactive value) chỉ
cập nhật để phản hồi một sự kiện cụ thể.
rval_x <- eventReactive(input$event, {
# calculations
})
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
Hướng dẫn bài tập
- Dùng
eventReactive()để trì hoãn việc tính BMI cho đến khi người dùng bấm nút.
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 height (in m)', 1.5, 1, 2, step = 0.1),
numericInput('weight', 'Enter weight (in Kg)', 60, 45, 120),
actionButton("show_bmi", "Show BMI")
),
mainPanel(
textOutput("bmi")
)
)
)
server <- function(input, output, session) {
# MODIFY CODE BELOW: Use eventReactive to delay the execution of the
# calculation until the user clicks on the show_bmi button (Show BMI)
rval_bmi <- reactive({
input$weight/(input$height^2)
})
output$bmi <- renderText({
bmi <- rval_bmi()
paste("Hi", input$name, ". Your BMI is", round(bmi, 1))
})
}
shinyApp(ui = ui, server = server)