我有一个闪亮的应用程序,其中有一堆选项卡,每个选项卡上都有一些绘图。还有一个带有一些控件的边栏,当我更改输入时,绘图可能需要几秒钟才能刷新。绝对可以(需要从数据库中加载数据)。
不好的是,当我离开选项卡然后稍后返回时,头几秒钟我看到了旧版本的绘图,这可能会非常混乱,尤其是在延迟达到3的情况下5秒(这种情况很少发生,但我找不到完全阻止它发生的方法)。
任何建议将不胜感激。
如果在描述中不清楚,请在下面提供一些希望有助于说明问题的代码。切换选项卡,向任一端移动滑块以更改图形,然后返回到原始选项卡-您应该能够看到图像从旧版本切换到新版本,这是我要摆脱的行为
library(shiny)
ui <- fluidPage(
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 5000,
value = 3000)
),
mainPanel(
tabsetPanel(
tabPanel("tab1",
plotOutput("distPlot1")
),
tabPanel("tab2",
plotOutput("distPlot2")
)
)
)
)
)
server <- function(input, output) {
output$distPlot1 <- renderPlot({
x <- rnorm(input$bins)
bins <- seq(min(x), max(x), length.out = input$bins + 1)
plot(1:input$bins, x)
})
output$distPlot2 <- renderPlot({
x <- rnorm(input$bins)
bins <- seq(min(x), max(x), length.out = input$bins + 1)
plot(1:input$bins, x)
})
}
shinyApp(ui = ui, server = server)
答案 0 :(得分:0)
这是一个主意。 tabsetPanel
具有id
属性。如果设置,它将定义input
中元素的名称,该元素包含value
中所选标签的title
/ tabsetPanel
。您可以测试一下是否在每个renderPlot
中都选择了“正确”标签,如果未选择正确的标签,则返回NULL
。我通过将Sys.sleep(1)
放在MWE的每个renderPlot
中来模拟您的数据库延迟,这似乎具有预期的效果。
library(shiny)
ui <- fluidPage(
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 5000,
value = 3000)
),
mainPanel(
tabsetPanel(
id="panels",
tabPanel("tab1",
plotOutput("distPlot1")
),
tabPanel("tab2",
plotOutput("distPlot2")
)
)
)
)
)
server <- function(input, output) {
output$distPlot1 <- renderPlot({
if (input$panels != "tab1") return()
Sys.sleep(1)
x <- rnorm(input$bins)
bins <- seq(min(x), max(x), length.out = input$bins + 1)
plot(1:input$bins, x)
})
output$distPlot2 <- renderPlot({
if (input$panels != "tab2") return()
Sys.sleep(1)
x <- rnorm(input$bins)
bins <- seq(min(x), max(x), length.out = input$bins + 1)
plot(1:input$bins, x)
})
}
shinyApp(ui = ui, server = server)