在模块中使用shiny的renderUI

mat*_*him 4 module r shiny

这是我在 stackoverflow 上的第一个问题。我在闪亮(1.0.5)中遇到模块和 renderUI 的问题。

当我在中使用 renderUI 时

#### Main Part

ui <- bootstrapPage(
  uiOutput("DynamicContent")
)

server <- function(input, output,session) {

  S_A <- selectInput("S_A_Input"  ,"Change Me for print message",choices=1:3 )

  output$DynamicContent <- renderUI({
    tagList(S_A) 
  })

  observe({
    print(input$S_A_Input) 
  })

}

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

那么更改 selectInput 将导致更改 input$S_A_Input,因此会发生打印。没关系。

另一方面,如果我使用模块,则 input$S_A_Input 似乎不起作用:

### Module Part

Module_YYY_Server <- function(input, output, session){ 

  S_A <- selectInput("S_A_Input"  ,"Change Me for print message",choices=1:3 )

  output$DynamicContent <- renderUI({
    tagList(S_A) 
  })

  observe({
    print(input$S_A_Input) 
  })


}


Module_YYY_Ui <- function(id){

  ns <- NS(id) # Creates Namespace

  tagList(
    uiOutput("DynamicContent" %>% ns)
  )

}
Run Code Online (Sandbox Code Playgroud)

然后调用该模块。

#### Main Part

ui <- bootstrapPage(
  Module_YYY_Ui("YYY")  
)

server <- function(input, output,session) {
  callModule(Module_YYY_Server,"YYY")
}

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

我还没有找到解决此行为的方法。

yus*_*kam 8

聚会迟到了,但这是解决您的问题的另一种选择

会话$ns(“id”)

这是它的样子:

Module_YYY_Server <- function(input, output, session){

  output$DynamicContent <- renderUI({
    selectInput(session$ns("S_A_Input"), "Change Me for print message", choices = 1:3)
    })

  output$text <- renderText({
    req(input$S_A_Input)
    input$S_A_Input})
}


Module_YYY_Ui <- function(id){

  ns <- NS(id) # Creates Namespace

  tagList(
    uiOutput(ns("DynamicContent")),
    textOutput(ns("text"))
  )
}


ui <- bootstrapPage(
  Module_YYY_Ui("YYY")
)

server <- function(input, output,session) {
  callModule(Module_YYY_Server,"YYY")
}

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

这是基于此处的示例