在访问选项卡之前,另一个选项卡中的传单未使用 leafletproxy 更新
Leaflet in another tab not updated with leafletproxy before visiting tab
我正在使用 shiny 制作一个使用多个选项卡的应用程序。在一个选项卡(不是起始选项卡)上,我显示了一张传单地图,它由不同选项卡上的小部件控制。
问题是,如果我更改了一个选项卡上的输入,而不是先访问地图,然后再访问地图,则地图不会更新。但是,在地图选项卡上之后或同时更改输入,地图会更新。
重现问题:
- 运行以下代码
- 将输入颜色更改为蓝色(无需先访问地图选项卡!)
- 转到“地图”选项卡
- 预期行为:蓝点。实际行为:无点(尚未绘制,好像
observe()
没有被触发(注意 observe 被触发但没有效果),或者传单没有呈现)
- 将颜色更改为黄色
- 出现黄点
- 转到“其他”选项卡并将颜色更改为绿色
- 返回“地图”选项卡并看到一个绿点
同样,当应用程序启动并直接转到地图时,我希望显示一个红点。而是没有点。
代码:
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 中呈现。
知道如何解决这个问题吗?
在我的真实应用程序中,第一个选项卡允许用户上传数据,而第二个选项卡使用传单显示数据,因此传单地图在实际呈现之前得到更新和配置...
请注意,由于各种原因(传单的大小,取决于其他反应值),一次性创建传单(在没有 leafletProxy
的 observe()
中创建地图)不是一种选择、场景等)。
这适用于将输出选项 suspendWhenHidden
设置为 FALSE
并通过向观察者中的选项卡集添加依赖项:
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")),
id = "tabset"
)
)
)
)
server <- function(input, output, session) {
output$map <- renderLeaflet({
leaflet() %>%
addTiles()
})
outputOptions(output, "map", suspendWhenHidden = FALSE)
proxy <- leafletProxy("map")
observeEvent(list(input$tabset, input$color), {
proxy %>%
addCircles(lng = 0, lat = 0, radius = 3e6, color = input$color)
})
}
shinyApp(ui, server)
我正在使用 shiny 制作一个使用多个选项卡的应用程序。在一个选项卡(不是起始选项卡)上,我显示了一张传单地图,它由不同选项卡上的小部件控制。
问题是,如果我更改了一个选项卡上的输入,而不是先访问地图,然后再访问地图,则地图不会更新。但是,在地图选项卡上之后或同时更改输入,地图会更新。
重现问题:
- 运行以下代码
- 将输入颜色更改为蓝色(无需先访问地图选项卡!)
- 转到“地图”选项卡
- 预期行为:蓝点。实际行为:无点(尚未绘制,好像
observe()
没有被触发(注意 observe 被触发但没有效果),或者传单没有呈现)
- 预期行为:蓝点。实际行为:无点(尚未绘制,好像
- 将颜色更改为黄色
- 出现黄点
- 转到“其他”选项卡并将颜色更改为绿色
- 返回“地图”选项卡并看到一个绿点
同样,当应用程序启动并直接转到地图时,我希望显示一个红点。而是没有点。
代码:
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 中呈现。
知道如何解决这个问题吗?
在我的真实应用程序中,第一个选项卡允许用户上传数据,而第二个选项卡使用传单显示数据,因此传单地图在实际呈现之前得到更新和配置...
请注意,由于各种原因(传单的大小,取决于其他反应值),一次性创建传单(在没有 leafletProxy
的 observe()
中创建地图)不是一种选择、场景等)。
这适用于将输出选项 suspendWhenHidden
设置为 FALSE
并通过向观察者中的选项卡集添加依赖项:
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")),
id = "tabset"
)
)
)
)
server <- function(input, output, session) {
output$map <- renderLeaflet({
leaflet() %>%
addTiles()
})
outputOptions(output, "map", suspendWhenHidden = FALSE)
proxy <- leafletProxy("map")
observeEvent(list(input$tabset, input$color), {
proxy %>%
addCircles(lng = 0, lat = 0, radius = 3e6, color = input$color)
})
}
shinyApp(ui, server)