您能提供使用renderUI的模块化闪亮代码的MWE吗?我想举个例子。
这里有一个很好的教程讨论:https://shiny.rstudio.com/articles/modules.html但是,它没有说明如何在ui和服务器中集成renderUI组件的模块化。
这是我到目前为止所尝试的内容:
在我的ui代码中,我有:
htmlOutput("selectionUI")
在我的服务器代码中,我有:
output$selectionUI <- renderUI({
req(input$Filter)
selectInput(
inputId = "Selection",
label = "Selection",
choices = get("qlist", envir = get(input$source))[[input$Filter]]$responses)
})
现在我想模块化这是因为它是一个有时重复的元素,但我不知道如果我完成后如何将它插入到我的ui / server代码中。
这是我尝试过的:
selectionChooserUI <- function(id) {
ns <- NS(id)
uiOutput(ns('controls'))
}
selectionChooser <- function(input, output, session, data, sourcedata, filter) {
output$selectionUI <- renderUI({
req(input$Filter)
ns <- session$ns
selectInput(
inputId = ns('Selection'),
label = 'Selection',
choices = get('qlist', envir = get(input[[sourcedata()]]))[[input[[filter()]]]]$responses
)
})
}
我需要将哪些内容添加到我的ui代码才能显示,目前我收到的投诉是"output" is missing with no default
?
我现在用我的ui代码调用它,使用:
selectionChooserUI("selection")
答案 0 :(得分:2)
可能是这样的。我没有测试它,因为我没有你的数据..
library(shiny)
ui <- fluidPage(
h1("Get me a Module!"),
selectInput("source", "Some source", choices = letters[1:4]),
selectInput("filter", "Some filter", choices = letters[1:4]),
selectionChooserUI("id_of_me")
)
server <- function(input, output, session) {
get_me_choices <- reactive({
get("qlist", envir = get(req(input$source)))[[req(input$filter)]]$responses })
callModule(module = selectionChooser, id = "id_of_me", choices = get_me_choices)
}
selectionChooserUI <- function(id) {
ns <- NS(id)
uiOutput(ns('selection'))
}
selectionChooser <- function(input, output, session, choices) {
ns <- session$ns
output$selection <- renderUI({
selectInput(
inputId = ns('selection'),
label = 'Selection',
choices = choices
)
})
}