You need to enable JavaScript to run this app. 为何从shinydashboard迁移到shinymaterial后DT因子过滤清除按钮消失?
优惠活动
大模型
产品
解决方案
定价
更多

为何从shinydashboard迁移到shinymaterial后DT因子过滤清除按钮消失?

Shiny应用迁移适配问题记录

因shinymaterial的界面美观性更受用户偏好,目前正将多个基于shinydashboard开发的Shiny应用迁移至shinymaterial框架,迁移过程中发现DT表格组件的渲染异常:在shinymaterial仪表板中使用DT表格对因子类型列执行搜索过滤时,shinydashboard环境下可正常显示的、用于一键清除已选因子过滤条件的“x”按钮无法正常渲染。

现象对照

  • shinydashboard环境下,配置完全一致的DT表格,选中因子列的过滤选项后,清除按钮可正常显示
  • shinymaterial环境下,采用相同表格配置时,该清除按钮完全缺失

可复现问题的代码示例

运行正常的shinydashboard版本

library(shiny)
library(tidyverse)
library(DT)

# 加载shinydashboard框架依赖
library(shinydashboard)

ui <- shinydashboard::dashboardPage(
  shinydashboard::dashboardHeader(
    title = "示例标题",
    titleWidth = 250
  ),
  shinydashboard::dashboardSidebar(),
  shinydashboard::dashboardBody(
    DT::dataTableOutput("exampleDT")
  )
)

server <- function(input, output, session) {
  
  # 基于mpg数据集,将manufacturer列转换为因子类型
  df <- mpg %>%
    mutate(manufacturer = as.factor(manufacturer))
  
  # 渲染DT数据表格
  output$exampleDT <- DT::renderDataTable({
    DT::datatable(
      df,
      class = 'cell-border stripe',
      rownames = FALSE,
      escape = FALSE,
      extensions = c("KeyTable"),
      filter = list(position = "top"),
      options = list(
        searching = TRUE,
        searchHighlight = TRUE,
        scrollX = TRUE,
        pageLength = 5,
        autoWidth = TRUE,
        keys = TRUE,
        columnDefs = list(list(className = "dt-center", targets = "_all"))
      )
    )
  })
}

shinyApp(ui = ui, server = server)

可复现问题的shinymaterial版本

library(shiny)
library(tidyverse)
library(DT)

# 加载shinymaterial框架依赖
library(shinymaterial)

ui <- shinymaterial::material_page(
  title = "示例标题",
  primary_theme_color = "grey",
  shinymaterial::material_tabs(
    tabs = c("标签页1" = "tab1")
  ),
  shinymaterial::material_tab_content(
    tab_id = "tab1",
    shinymaterial::material_card(
      title = "",
      DT::dataTableOutput("exampleDT")
    )
  )
)

server <- function(input, output, session) {
  
  # 基于mpg数据集,将manufacturer列转换为因子类型
  df <- mpg %>%
    mutate(manufacturer = as.factor(manufacturer))
  
  # 渲染DT数据表格
  output$exampleDT <- DT::renderDataTable({
    DT::datatable(
      df,
      class = 'cell-border stripe',
      rownames = FALSE,
      escape = FALSE,
      extensions = c("KeyTable"),
      filter = list(position = "top"),
      options = list(
        searching = TRUE,
        searchHighlight = TRUE,
        scrollX = TRUE,
        pageLength = 5,
        autoWidth = TRUE,
        keys = TRUE,
        columnDefs = list(list(className = "dt-center", targets = "_all"))
      )
    )
  })
}

shinyApp(ui = ui, server = server)

内容的提问来源于stack exchange,提问作者Jim Fairman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 14:24:01