在固定的时间内在 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 内存。
如何在我的 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 内存。