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

shinydashboard开发动态通知报shiny.tag类错误如何解决

报错原因

这个错误是传入组件的参数类型不匹配导致的:

  • shinydashboard里dropdownMenu()的.list参数,强制要求传入的每个元素都必须是shiny.tag类的合法菜单项对象,也就是需要通过notificationItem()、messageItem()、taskItem()这类官方提供的构造函数生成的组件结构。
  • 你的复现代码里,if判断分支直接返回了普通字符串给items,本质是把纯文本传给了.list,渲染时组件校验类型不通过,就会抛出*Expected an object with class 'shiny.tag'*的错误。
修复方法

把分支里的纯字符串替换为notificationItem()构造的合法通知对象,单个或多个通知项统一包裹在列表里传给.list参数即可,修复后的可运行代码如下:

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "test",
                  dropdownMenuOutput("menu")
  ),
  dashboardSidebar(),
  dashboardBody()
)

server <- function(input, output, session) {
  
  output$menu <- renderMenu({
    items <- if(Sys.Date() > as.Date("2022-06-30")){
      notificationItem(
        text = "June is over",
        icon = icon("calendar-check"),
        status = "warning"
      )
    }else{
      notificationItem(
        text = "June",
        icon = icon("calendar"),
        status = "info"
      )
    }
    
    dropdownMenu(
      type = "notifications", 
      .list = list(items)
    )
  })

}

shinyApp(ui, server)
补充说明
  • 如果需要展示多条通知,把多个notificationItem()对象依次放入传给.list的列表即可,格式为.list = list(item1, item2, item3)
  • 如果某个判断分支下不需要展示任何通知,直接传空列表list()即可,不会触发类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:42:16