R Shiny:tabSet 未使用 navbarPage 内的 renderUI 进行渲染

问题描述 投票:0回答:2

我对 R 和 Shiny 都是新手。我试图在

tabPanel
文件中创建
server.R
但没有成功,我认为这是因为在
uiContent
中使用
navbarPage
来获取
tabPanel
时出现错误。

这是我的

ui.R

shinyUI(
    navbarPage(
        "test", id = "nav", collapsible = TRUE, position = "fixed-top",

        # needed to keep fixed-top navbar from obscuring content
        header = tags$style(type="text/css", "body {padding-top: 70px;}"),

        uiOutput("content")
    )
)

这是

server.R

function(input, output) {
    output$content <- renderUI({
        tabPanel("tabA")
    })
}

我的创可贴解决方案是在

navbarPage
中包含
renderUI
函数,但我想知道是否有某种方法可以在
server.ui
文件中呈现选项卡,同时在
navbarPage
文件中保留
ui.R
.

r shiny-server shiny
2个回答
2
投票

经过长时间的研究,我认为这是不可能的。

当在初始设置中调用

navbarPage
时,它会为输入列表提供给它的所有
tabPanels
创建超链接和占位符。 (请参阅下面的链接。)由
uiOutput
注入的任何进一步添加都不会执行此操作,因为定义
navbarPage
(而不是内容)的 HTML 上下文在启动后已修复。任何注入只会影响选项卡中显示的内容。

你可以说,

shinyUI
不知道shinyServer所具有的反应性。但是,由于 Shiny 中的反应性意味着快速重新评估,因此通过
shinyServer
重建 UI 似乎是构建动态
navbarPages
的合法“Shiny”方式。

如果您仍然不满意,您可以搜索此页面:Shiny Bootstrap Definitions。特别是在第 306-389 行 (

navbarPage
) 和 689-834 (
buildTabset
) 中,您可以阅读实际的函数定义。也许您可以模仿这些并添加额外的实用程序以使其正常工作。


0
投票

我遇到了同样的问题,下面的代码有效。尝试将 tabPanel 留在用户界面中,并在服务器中渲染其余部分(假设您想要一个流畅的页面),如下所示。

shinyUI(
    navbarPage(
        "test", id = "nav", collapsible = TRUE, position = "fixed-top",

        # needed to keep fixed-top navbar from obscuring content
        header = tags$style(type="text/css", "body {padding-top: 70px;}"),

        tabPanel("tabA",
        uiOutput("content"))
    )
)

function(input, output) {
    output$content <- renderUI({
        fluidPage("tabA content")
    })
}
© www.soinside.com 2019 - 2024. All rights reserved.