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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:20:54