在固定的时间内在 R shiny 中加载页面

Loading Page in R shiny for a fixed amount of time

如何在我的 UI 填充服务器函数内的数据集计算时添加加载器页面?我的 UI 在大约 30 秒内填充了值。所以我希望这个加载程序页面显示 30 秒,然后隐藏它以显示我的实际 UI,到那时它已经填满了。

如有任何帮助,我们将不胜感激。下面是示例代码:

ui <- fluidPage(
  useShinyjs(),
  div(
    id = "loading_page",
    h1("Loading...")
  ),

  titlePanel("XYZ"),
  sidebarLayout(
    sidebarPanel(
      
      p("Lorem Ipsum"),
      
      selectInput(inputId = "ab", label = "SelectSomething", choices = c("A","B","C","D")),
      p("Please Wait for 30 secs for data to load.."),
      sliderInput(inputId = "Age", label = "Age Range", min=16, max=45, value=c(16,45)), 
        actionButton(inputId = "update", label = "Go!")
    ),
    mainPanel(
      h3("ABC:"),
      uiOutput("table"),
      br(),
      uiOutput("OP1"),
      br(),
      uiOutput("OP2"),
      uiOutput("OP3"),
      br(),
      uiOutput("OP4") 
    )
  )
)


dataset<-readRDS(file = "my_data.rds")  

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

})

看来您正在使用来自 https://whosebug.com/a/35665217/3358272 的代码,这使它成为一种骗局,但也许不是这样的:如何做到这一点 with more UI 组件.

只需将您所有的标题和侧面板内容包装在 hidden(div(...)) 中并使用一个 ID。

从那里开始,您可以通过使用触发两次的反应式 observe 块来允许其他事情做一些工作:第一次设置 wake-up 警报(此处为 3000 毫秒),第二次删除 #loading_page div.

ui <- fluidPage(
  useShinyjs(),
  div(
    id = "loading_page",
    h1("Loading...")
  ),
  hidden(
    div(
      id = "main_content",
      titlePanel("XYZ"),
      sidebarLayout(
        sidebarPanel(
          p("Lorem Ipsum"),
          selectInput(inputId = "ab", label = "SelectSomething", choices = c("A","B","C","D")),
          p("Please Wait for 30 secs for data to load.."),
          sliderInput(inputId = "Age", label = "Age Range", min=16, max=45, value=c(16,45)), 
          actionButton(inputId = "update", label = "Go!"),
          ),
        mainPanel(
          h3("ABC:"),
          uiOutput("table"),
          br(),
          uiOutput("OP1"),
          br(),
          uiOutput("OP2"),
          uiOutput("OP3"),
          br(),
          uiOutput("OP4")
        )
      )
    )
  )
)
server <- function(input, output, session) {
  already_started <- FALSE
  observe({
    if (already_started) {
      removeUI("#loading_page")
    } else {
      invalidateLater(3000, session)
      already_started <<- TRUE
    }
  })
}

reactiveVal 用于 already_started 也是“正确的”。我不这样做的原因是我们不需要它的反应性,只需要 two-shot 内存。