【问题标题】:Loading Page in R shiny for a fixed amount of time在 R 中闪亮加载页面一段固定的时间
【发布时间】:2020-12-15 14:56:00
【问题描述】:

如何在我的 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) {

})

【问题讨论】:

  • 未经测试,我认为您可以使用invalidateLater 添加一个observe,使用removeUI 或删除加载程序覆盖所需的任何内容。
  • 嘿,你能分享一些代码来展示如何做到这一点吗? @r2evans
  • 你用什么来“加载”覆盖?
  • 如果你检查上面的代码,我已经添加了一个 id 为 'loading_page' 的 div 和一个 h1 标题。
  • 抱歉,我正在寻找带有 CSS 和/或花哨的东西的东西,没有意识到那是占位符。我的错!

标签: r shiny shinyjs


【解决方案1】:

您似乎正在使用来自https://stackoverflow.com/a/35665217/3358272 的代码,这使得这有点像骗人的,但可能不是这样:使用更多 UI 组件如何做到这一点。

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

从那里,您可以通过使用触发两次的反应性observe 块来允许其他事情做一些工作:第一次设置唤醒警报(此处为 3000 毫秒),第二次删除@ 987654324@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 也是“正确的”。我没有这样做的原因是我们不需要反应,只需要两次记忆。

【讨论】:

    猜你喜欢
    • 2020-01-25
    • 2017-07-15
    • 2013-03-28
    • 2018-04-30
    • 2021-02-26
    • 2020-10-25
    • 1970-01-01
    • 2021-04-11
    • 2012-09-03
    相关资源
    最近更新 更多