开始使用shiny,我尝试学习如何使用shiny module设计模式。作为最简单的示例,我想显示一个数据集而无需任何进一步的交互。
我希望在 navbarPage
的 tabPanel
中组织 UI。每个面板都是相互独立的,(除了所有面板都使用全局数据库连接对象,但这现在不困扰我)。
以下是 DT GUI 元素的代码:
library(shiny)
library(DT)
tabTable <- function(id) {
ns <- shiny::NS(id)
tabPanel(
"Table",
shiny::dataTableOutput(ns("table"))
)
}
这是服务器逻辑。我想让它绘制数据表。
srvTable <- function(id, dat) shiny::moduleServer(id,
function(input, output, session) {
output$table <- shiny::renderDataTable({DT::datatable(dat)})
}
)
现在这是用户界面和服务器的定义:
ui <- shiny::navbarPage(title="Test",
tabTable(id="iris"),
shiny::tabPanel(title="Scatter")
)
server <- function(input, output, session) {
srvTable(id="iris", dat=iris)
session$onSessionEnded(stopApp)
}
shiny::shinyApp(ui, server)
此应用程序启动,它显示导航栏,但不显示数据集。有什么提示我在哪里放置命令吗?对我来说,问题是服务器模块没有需要使用react的明显条件。这种情况该怎么办?
最佳答案
试试这个
library(shiny)
library(DT)
tabTable <- function(id) {
ns <- shiny::NS(id)
tabPanel(
"Table",
DTOutput(ns("table"))
)
}
srvTable <- function(id, dat) { shiny::moduleServer(id,
function(input, output, session) {
output$table <- renderDT({DT::datatable(dat)})
}
)}
ui <- shiny::navbarPage(title="Test",
tabTable(id="iris"),
shiny::tabPanel(title="Scatter")
)
server <- function(input, output, session) {
srvTable(id="iris", dat=iris)
session$onSessionEnded(stopApp)
}
shiny::shinyApp(ui, server)
关于r - 用于显示表格的 Shiny 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65208337/