如何使用 eventReactive 读取并显示按钮单击时的数据?

问题描述 投票:0回答:1

我需要做的是仅在单击按钮时读取并显示 geoJSON 数据。我的原始数据非常重,应用程序启动时无需加载它 - 仅当单击特定按钮时。老实说,我用

observeEvent
做到了,并且有效。我只是想知道如何用
eventReactive
做到这一点,我认为在这个地方会更好。

我的正常工作代码如下。 推荐的代码是我尝试使用

eventReactive
- 它也工作(相当)好,但是..当我运行代码时,底图不会显示,只有当我单击按钮时,它才会与等值线一起显示。

library(shiny)
library(leaflet)
library(dplyr)
library(sf)


ui <- fluidPage(
  actionButton("btn", label = "Choropleths"),
  leaflet::leafletOutput("map") 
)

server <- function(input, output, session) {
  
  observeEvent(input$btn, {
    dataChoro <- sf::st_read(dsn = "https://raw.githubusercontent.com/PublicaMundi/MappingAPI/master/data/geojson/us-states.json")

    leaflet::leafletProxy("map") %>%
      leaflet::addPolygons(
        data = dataChoro,
        group = "raw"
      )
   })
  
  # dataChoro <- eventReactive(input$btn, {
  #   sf::st_read(dsn = "https://raw.githubusercontent.com/PublicaMundi/MappingAPI/master/data/geojson/us-states.json")
  # })  
        
  output$map <- leaflet::renderLeaflet({
    leaflet::leaflet() %>%
      leaflet::addTiles() %>%
      leaflet::setView(-99.659006, 40.011318, zoom = 4) #%>% 
      # leaflet::addPolygons(
      #   data = dataChoro(),
      #   group = "raw"
      # )
  })
}

shinyApp(ui, server)

基本上,如果我想“按需”读取并显示给定的数据集 - 哪种方法更好:

eventReactive
observeEvent

r shiny r-leaflet
1个回答
1
投票

也许像下面这样? 您基本上将数据存储在反应性对象中,然后监听该反应性对象。

  dataChoro <- eventReactive(input$btn, {
    sf::st_read(dsn = "https://raw.githubusercontent.com/PublicaMundi/MappingAPI/master/data/geojson/us-states.json")
  })
  observeEvent(dataChoro(), {
    leaflet::leafletProxy("map") %>%
      leaflet::addPolygons(
        data = dataChoro(),
        group = "raw"
      )
  })
  output$map <- leaflet::renderLeaflet({
    leaflet::leaflet() %>%
      leaflet::addTiles() %>%
      leaflet::setView(-99.659006, 40.011318, zoom = 4)
  })

请注意,请记住,每次单击按钮时都会下载数据。您可能需要设置一个标志来防止在

eventReactive()
标志内发生这种情况。

像下面这样的东西会起作用

  data_downloaded = FALSE
  dataChoro <- eventReactive(input$btn, {
    if (data_downloaded) {
      req(FALSE)
    }
    data = sf::st_read(dsn = "https://raw.githubusercontent.com/PublicaMundi/MappingAPI/master/data/geojson/us-states.json")
    data_downloaded <<- TRUE
    data
  })
© www.soinside.com 2019 - 2024. All rights reserved.