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
相关产品推荐
相关产品推荐

