使用InsertUI和UpdateSelectizeInput

时间:2020-03-19 17:17:10

标签: r shiny

我试图将服务器功能中的InsertUI和updateSelectizeInput方法用作应用程序的一部分,主要是因为我的选择列表很大。

library(shiny)

baby_names <- babynames::babynames %>% 
  distinct(name) %>%
  .[["name"]] %>% 
  sort()

ui <- fluidPage(
  tags$div(id = 'placeholder')
)

server <- function(input, output, session) {
  id = "babies"
  insertUI(selector = '#placeholder',
           ui = tags$div(list(
             selectizeInput("babynames", label = "Baby Names!", multiple = TRUE, choices = NULL, width = '400px',
                            options = list(placeholder = 'Type a baby name.'))
           ), 
           immediate = TRUE, 
           id = id))

    updateSelectizeInput(
      session, inputId = "babynames",
      choices = baby_names,
      server = TRUE)

}

shinyApp(ui, server)

由于显示selectizeInput但未显示下拉选项,因此我并没有获得太多成功。我应该如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:0)

insertUI的文档中对此进行了解释:

此功能允许您随时随地向应用中动态添加任意大的UI对象。 与renderUI()不同,用insertUI生成的UI不能整体上进行更新:创建后,它就一直停留在该位置。每个新的insertUI调用都会创建更多UI对象,除了已经存在的UI对象(彼此独立)。要更新用户界面的一部分(例如:输入对象),必须使用适当的渲染功能或自定义的反应功能

(我添加了粗体)

因此,您应该改用renderUI