微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Shiny:renderUI和Shiny:uioutput产生一个新的menuItem和一个新的输出,但是tabItem没有显示

如何解决Shiny:renderUI和Shiny:uioutput产生一个新的menuItem和一个新的输出,但是tabItem没有显示

我想基于actionButton创建新的menuItem和新的plotOutput,新渲染的plotOutput将根据提交的值显示一个图。我已经成功生成了带有提交值的menuItem和numericInput小部件,但是未显示该图和相应的tabItem。
这是工作流程:

提交->使用输入对象和plotOutput渲染menuItem->将基于渲染的输入对象显示plotOutput

第二个步骤成功,但其余步骤不起作用,下面列出了代码

library(shiny)
library(shinydashboard)

## ============================================ Define ui ==================================================

header1 <- dashboardHeader(
  title = "My Dynamic Menu"
) #dashboardHeader

# DYNAMIC UI
sidebar1 <- dashboardSidebar(
  sidebarMenu(
    menuItem('aa',tabName = 'aa')
  ),sidebarMenuOutput('bb')
) #dashboardSidebar
#
body1 <- dashboardBody(
  tabItems(
    tabItem(tabName = 'aa',numericInput('num_input','number',value = 5),actionButton('submit','Submit')),tabItem(tabName = "main",uIoUtput('eee')) # put a tabItem here
  ) #tabItems
) #dashboardBody

ui <- dashboardPage(header1,sidebar1,body1)

server <- function(input,output,session) {
  dt<-eventReactive(input$submit,{
    input$num_input * 5
  })
  
  observeEvent(input$submit,{
    output$bb<-renderMenu({
      sidebarMenu(
        menuItem("Main",tabName = "main",numericInput('ddd','input value',value = dt()),numericInput('ggg','another input',value=dt()+5))
      )
    })
    
    output$eee<-renderUI({
      fluidRow(
        p('hello'),plotOutput('fff')
      )
    })
  })
  
  
   observeEvent({
     input$ddd
     input$ggg
   },{
       output$fff<-renderPlot({
       plot(1:input$ddd,main=as.character(input$ggg))
     })
   })
  
} #server
## ============================================ Run application ============================================
shinyApp(ui,server)

非常感谢您解决此问题。

解决方法

要与tabItem链接,menuItem仅应包含menuSubItem。如果删除两个数字输入(ddd和ggg),则在单击新创建的主菜单项时将激活主页。混合导航和输入不是一个好主意。

最好将输入内容移至主tabItem或将其放在侧边栏中的单独面板中(不在菜单中)。

为ui中的输入添加了uiOutput

# DYNAMIC UI
sidebar1 <- dashboardSidebar(
  sidebarMenu(
    menuItem('aa',tabName = 'aa')
  ),sidebarMenuOutput('bb'),uiOutput("inputs")
) #dashboardSidebar

为此服务器中的输出添加了renderUI

output$inputs <- renderUI(tagList(
      numericInput('ddd','input value',value = dt()),numericInput('ggg','another input',value=dt()+5)
    ))

并从renderMenu中删除了输入

output$bb<-renderMenu({
      message("bb")
      sidebarMenu(
        menuItem("Main",tabName = "main")
      )
    })

您必须手动导航到主页才能显示图

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。