【问题标题】:uiOutput and and renderUI do not work (R Shiny)uiOutput 和 renderUI 不起作用(R Shiny)
【发布时间】:2020-09-29 11:39:27
【问题描述】:

我正在尝试创建一个应用程序,它会创建一个简单的字符串列表 (actives$name),并向我显示这些字符串。 由于某种原因,它不起作用。代码如下:

library(shiny)

ui <- fluidPage(

  sidebarLayout(
    mainPanel(
      textInput(inputId = "name", label = "Name", value = "foo"),
      actionButton(inputId = "add", label = "Add")
    ),
    sidebarPanel(
      uiOutput("activeB")
    )
  ),

)

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

  actives <- reactiveValues()

  observeEvent(input$add,{
    actives$name <- c(actives$name, input$name)
  })

  output$activeB <- renderUI({
    for (i in 1:length(actives$name)) {
      p("Name:")
      verbatimTextOutput(actives$name[i])
      print(actives$name[i])
    }
  })

}

shinyApp(ui = ui, server = server)

我在for 循环中使用的print() 显示了正确的结果,因此它“知道”我正在尝试做什么。它只是不输出它。我做错了什么?

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    有趣的一个。花了我几个去得到它。您需要将renderUI 输出包装在tagList 中:

      output$activeB <- renderUI({
        tagList(HTML(paste(actives$name, collapse="<br>")))
      })
    

    两个观察结果:

    • 您的演示代码将永远无法运行,因为您的调试print 循环是renderUI 中的最后一条语句,因此renderUI 永远不会返回任何内容。 :(
    • 你知道不用uiOutputrenderUI也能得到同样的效果,对吧?我假设您已经简化了实际用例以专注于问题 - 在这种情况下,谢谢! :)

    完整代码:

    library(shiny)
    
    ui <- fluidPage(
      sidebarLayout(
        mainPanel(
          textInput(inputId = "name", label = "Name", value = "foo"),
          actionButton(inputId = "add", label = "Add")
        ),
        sidebarPanel(
          uiOutput("activeB")
        )
      )
    )
    
    server <- function(input, output, session) {
      actives <- reactiveValues(
        name=c()
      )
      observeEvent(input$add,{
        actives$name <- c(actives$name, input$name)
      })
      output$activeB <- renderUI({
        tagList(HTML(paste(actives$name, collapse="<br>")))
      })
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

    • 您的答案并不完全是我所需要的,但它确实澄清了renderUI 返回最后一个值,这就是我的问题所在。使用tagList(HTML()) 的解决方案适用于我的目的。关于你的第二个观察 - 这是正确的。
    • 对于我的actives 上的每个“项目”,我想要绘制的 UI 元素非常多,paste 的使用就在这里。
    猜你喜欢
    • 2023-01-30
    • 2020-02-17
    • 2015-01-19
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多