我想这个代码刷新每次移动地图时要刷新的输入值。
有人可以告诉我为什么这段代码不起作用?当我用“观察”功能替换服务器端的“被动”值时,它可以实现我的目的。
ui.R
library(shiny)
library(leaflet)
shinyUI(navbarPage(
title="HeatXPlorers", id="nav",
tabPanel(title="Interactive map",
div(class="outer",
leafletOutput(outputId = "map", width="100%", height="100%")
)
),
tabPanel(title="Producers",
fluidRow(column(2,
numericInput(inputId= "minLon_prod",
label = "Min Longitude", value=2.5)
))
)
))
server.r
library(shiny)
library(leaflet)
library(dplyr)
shinyServer(function(input, output, session) {
# Create the map
output$map <- renderLeaflet({
#input$map_bounds and input$map_zoom are created when the leaflet is created
leaflet() %>%
addTiles(
urlTemplate = "//{s}.tiles.mapbox.com/v3/jcheng.map- 5ebohr46/{z}/{x}/{y}.png",
attribution = 'Maps by <a href="http://www.mapbox.com/">Mapbox</a>') %>%
setView(lng = 2.49, lat = 47, zoom = 6)
})
################ END OF SINGLE TIME EXECUTION
## Interactive Map - for map ###########################################
prodInBounds <- reactive({
bounds <- input$map_bounds
updateNumericInput(session, inputId="minLon_prod", value = bounds$west)
})
})
答案 0 :(得分:1)
你的问题可以减少到观察者和反应性表达之间的根本区别。让我引用观察的官方文件:
观察者就像一个反应性表达(...)但与反应性表达不同,它不会产生结果(...)因此,观察者只对其副作用有用(...)。
反应式表达式和观察者之间的另一个对比是他们的执行策略。如果没有调用它们,则反应式表达式使用惰性求值(...),然后它们将永远不会重新执行。相反,观察者使用急切评估;一旦他们的依赖关系发生变化,他们就会安排自己重新执行。
现在让我们重点介绍两件事:
updateNumericInput
作为副作用,因此不会返回任何有用的内容,因为observe
是自然选择。prodInBounds
从未使用过,因此永远不会被评估,因为updateNumericInput
永远不会被调用。