首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用eventReactive读取和显示点击按钮时的数据?

如何使用eventReactive读取和显示点击按钮时的数据?
EN

Stack Overflow用户
提问于 2021-03-26 18:19:15
回答 1查看 43关注 0票数 0

我需要做的是只在单击按钮时读取和显示geoJSON数据。我的原始数据非常重,不需要在应用程序启动时加载它-只有在单击特定按钮时才需要加载。老实说,我用observeEvent做了这件事,它起作用了。我只是想知道如何使用eventReactive来做这件事,我认为在这个地方会更好。

下面是我正常工作的代码。Coommented代码是我尝试使用eventReactive的一种尝试--它也可以很好地工作,但是..当我运行代码时,底图不会显示,只有当我单击按钮时,它才会与choropleth一起显示。

代码语言:javascript
复制
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)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-29 20:54:24

也许是像下面这样的东西?您基本上将数据存储在反应式对象中,然后侦听该反应式对象。

代码语言:javascript
复制
  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()标志中设置一个标志来防止出现这种情况。

下面这样的代码将会起作用

代码语言:javascript
复制
  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
  })
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66814988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档