R Shiny技术问题:如何在bs4Dash::box最大化/折叠时触发事件?
解决bs4Dash Box折叠/最大化触发事件的问题
你报错是因为shinyjs::hidden()是用于隐藏DOM元素的函数,不能用来判断box的折叠状态。bs4Dash的box组件本身内置了状态监听的输入变量,无需依赖shinyjs就能实现需求。
正确实现代码
library(shiny) library(bs4Dash) ui <- fluidPage( box( id = "myBox", title = "测试盒子", collapsible = TRUE, # 开启折叠功能 maximizable = TRUE, # 开启最大化功能 "This is my box" ) ) server <- function(input, output) { # 监听折叠状态变化 observeEvent(input$myBox_collapsed, { if (input$myBox_collapsed) { print("Box 已折叠!") # 此处添加折叠时需执行的逻辑 } else { print("Box 已展开!") # 此处添加展开时需执行的逻辑 } }) # 监听最大化状态变化 observeEvent(input$myBox_maximized, { if (input$myBox_maximized) { print("Box 已最大化!") # 此处添加最大化时需执行的逻辑 } else { print("Box 已恢复正常大小!") # 此处添加恢复时需执行的逻辑 } }) } shinyApp(ui, server)
关键要点
- 必须为box设置
collapsible = TRUE和maximizable = TRUE,才会生成对应的状态输入变量 - 状态输入变量命名规则:
input$<box的id>_collapsed(折叠状态)、input$<box的id>_maximized(最大化状态),均为布尔值 - 使用
observeEvent监听状态变化比observe更高效,仅在状态改变时触发执行逻辑
内容的提问来源于stack exchange,提问作者R Greg Stacey
相关产品推荐
相关产品推荐

