You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:09:56