首页 > 解决方案 > 如何从最初不可见的动态生成的 UI 元素中访问值

问题描述

如果您运行此应用程序“a”,则在选择 UI 选项卡并生成填充“input$select”的 UI 元素之前,不会出现默认选定值。如何在加载应用程序时强制创建此元素,而无需单击面板对其进行初始化以访问其默认值。

library(shiny)
library(shinydashboard)

ui <- fluidPage(
    tabsetPanel(
        tabPanel(
            title = "landing",
            "Stuff"
        ),
        tabPanel(
            title = "UI",
            uiOutput("select")
        )
    ),
    textOutput("out")
)

server <- function(input, output, session) {
    output$select <- renderUI(
        selectInput(
            "select", "Selector:", choices = c("a", "b"), selected = "a"
        )
    )
    
    output$out <- renderText(input$select)
}

shinyApp(ui, server)

标签: rshiny

解决方案


您可以使用suspendWhenHidden = FALSE来自的参数outputOptions。我不得不在哪里放置outputOptions(它在函数开始时server不起作用)。但是,它仍然需要一点时间来加载,所以也许可以进一步优化它。

library(shiny)
library(shinydashboard)

ui <- fluidPage(
  tabsetPanel(
    tabPanel(
      title = "landing",
      "Stuff"
    ),
    tabPanel(
      title = "UI",
      uiOutput("select")
    )
  ),
  textOutput("out")
)

server <- function(input, output, session) {
  
  output$select <- renderUI({
    selectInput(
      "select", "Selector:", choices = c("a", "b"), selected = "a"
    )
  })
  
  output$out <- renderText(input$select)
  outputOptions(output, "select", suspendWhenHidden = FALSE)
}

shinyApp(ui, server)

推荐阅读