R语言:点击menuItem仅触发一次modalDialog弹窗的实现需求
解决方案:仅首次点击Widgets菜单时弹出模态框
核心思路是用一个响应式状态变量跟踪模态框的显示状态,只有当状态为「未显示」时,才在点击Widgets菜单时触发弹窗,之后更新状态为「已显示」,后续点击不再触发。
修改后的完整代码如下:
library(shiny) library(shinydashboard) ## UI ## ui <- dashboardPage( dashboardHeader(), dashboardSidebar( sidebarMenu(id = "sidebarmenu", menuItem("Dashboard", tabName = "dashboard"), menuItem("Subitems", tabName = "subitems", menuSubItem("Upload", "upload"), menuSubItem("Browse", "browse") ), menuItem("Widgets", tabName = "widgets") ) ), dashboardBody( uiOutput('tab') ) ) ## server ## server <- function(input, output) { output$tab <- renderUI({ paste("The selected tab is", input$sidebarmenu) }) # 创建响应式变量,记录模态框是否已显示过 has_shown_modal <- reactiveVal(FALSE) observeEvent(input$sidebarmenu, { req(input$sidebarmenu == "widgets") # 仅当模态框未显示过时执行弹窗 if(!has_shown_modal()){ showModal( modalDialog(title = "You selected Widgets", "Or did you?") ) # 更新状态为已显示 has_shown_modal(TRUE) } }) } shinyApp(ui, server)
关键代码说明
has_shown_modal <- reactiveVal(FALSE):初始化一个响应式变量,初始值FALSE表示模态框尚未显示- 在
observeEvent中,先通过req确认当前选中的是Widgets菜单,再判断!has_shown_modal():只有状态为未显示时才弹出模态框,随后将状态更新为TRUE,后续点击Widgets菜单时该条件不再满足,也就不会重复弹窗
内容的提问来源于stack exchange,提问作者TobKel
相关产品推荐
相关产品推荐

