如何解决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 举报,一经查实,本站将立刻删除。