使用 observeEvent() 触发反应
有些时候,您希望在某个事件发生时执行一项操作。 例如,当用户点击一个 "Download" 按钮时,您可能希望让应用将表格下载为 CSV 文件。或者,您可能希望在点击后显示一条通知或一个模态对话框。
observeEvent() 函数可以实现这一点。它接收两个参数:
- 您要响应的事件。
- 当事件发生时应调用的函数。
在本练习中,您将使用 observeEvent(),当用户点击标记为 "Help" 的按钮时,显示一 个包含帮助文本的模态对话框。帮助文本已经被赋值给变量 bmi_help_text。
本练习是课程的一部分
使用 R 构建 Shiny Web 应用
练习说明
- UI:
- 添加一个名为 'show_help'、标签为 "Help" 的操作按钮。您可能需要向下滚动或折叠控制台以查看 UI。
- Server:
- 取消注释
# showModal ...这行代码。 - 将
showModal(...)包裹在observeEvent()中,这样当用户点击帮助按钮时就会显示帮助文本。
- 取消注释
交互式实操练习
通过完成这段示例代码来试试这个练习。
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)