Shiny中menuSubItem触发leaflet::JS()参数错误如何解决?
解决Shiny应用中
Error in leaflet::JS(callback)报错问题 问题原因
你遇到的Error in leaflet::JS(callback) : The arguments for JS() must be a character vector错误,核心原因是带子菜单的menuItem不应设置tabName参数。当父menuItem包含menuSubItem时,它的作用是展开/折叠子菜单,而非对应一个独立的tab内容。设置tabName会触发shinydashboard内部错误的JS回调逻辑,若你的R环境中存在leaflet包,就会调用到leaflet::JS()并因参数不符合要求抛出错误。
解决方案
移除父menuItem的tabName参数即可,修改后的完整代码如下:
library(shiny) library(shinydashboard) ui <- dashboardPage( dashboardHeader(title = "Basic dashboard"), ## Sidebar content dashboardSidebar( sidebarMenu( # 移除父menuItem的tabName参数 menuItem("Widgets", icon = icon("globe"), menuSubItem("Widget1", tabName = "widget1", icon = icon("blind")), menuSubItem("Widget2", tabName = "widget2", icon = icon("blind"))) ) ), ## Body content dashboardBody( tabItems( tabItem(tabName = "widget1", h2("Widgets1 tab content")), tabItem(tabName = "widget2", h2("Widgets2 tab content")) ) ) ) server <- function(input, output){} shinyApp(ui, server)
补充说明
如果需要父菜单也对应一个独立的tab内容,需将父菜单与子菜单拆分为独立结构:
sidebarMenu( menuItem("Widgets Home", tabName = "widgets", icon = icon("globe")), menuItem("Widget Subitems", icon = icon("th-list"), menuSubItem("Widget1", tabName = "widget1", icon = icon("blind")), menuSubItem("Widget2", tabName = "widget2", icon = icon("blind"))) )
同时在dashboardBody中添加对应tabName = "widgets"的tabItem。
内容的提问来源于stack exchange,提问作者Media Mount
相关产品推荐
相关产品推荐

