我正在制作一个使用闪亮的应用程序,该应用程序使用多个选项卡。在一个选项卡(不是起始选项卡)上,我显示一张传单地图,该地图由不同选项卡上的小部件控制。
问题是,如果我更改一个选项卡上的输入,而不先访问地图,然后访问地图,则地图不会更新。但是,在地图选项卡之后或期间更改输入,地图会更新。
要复制该问题:
- 运行以下代码
- 将输入颜色更改为蓝色(无需先访问地图选项卡!)
- go to the "Map" tab
- 预期行为:蓝点。实际行为:没有点(尚未绘制,就好像
observe()
没有被触发(注意观察被触发但没有效果),或者传单没有渲染)
- change the color to yellow
- 转到“其他”选项卡并将颜色更改为绿色
- 返回“地图”选项卡并看到一个绿点
同样,当应用程序启动并且我们直接转到地图时,我希望会显示一个红点。相反,没有点。
Code:
library(shiny)
library(leaflet)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("color", "Color", choices = c("red", "blue", "yellow", "green"))
),
mainPanel(
tabsetPanel(
tabPanel("Other", h1("Empty Tab 1")),
tabPanel("Map", leafletOutput("map"))
)
)
)
)
server <- function(input, output, session) {
# the base map and the circles are separated due to data restrictions
# in the actual app!
output$map <- renderLeaflet({
leaflet() %>%
addTiles()
})
observe({
leafletProxy("map") %>%
addCircles(lng = 0, lat = 0, radius = 3e6, color = input$color)
})
}
shinyApp(ui, server)
我怀疑leafletProxy
不起作用,因为传单小部件尚未在步骤 2 中呈现。
知道如何解决这个问题吗?
在我的现实应用程序中,第一个选项卡允许用户上传数据,而第二个选项卡使用传单显示数据,因此传单地图在实际渲染之前会被更新和配置......
请注意,一次性创建传单(在observe()
没有leafletProxy
由于各种原因(传单的大小、依赖于其他反应值、场景等), ) 不是一个选项。