R setInputValue更新时无法打开面板

R setInputValue更新时无法打开面板,r,shiny,R,Shiny,我正在学习如何使用Shiny,但遇到了一个问题 我试图通过调用shinny.setInputValue('myEvent','open',{priority:'event'}),使ConditionalPanel打开 但是,面板没有打开。我检查了javascript事件是否被触发,因此看起来像: setInputValue未出现 UI未接收到事件 或者,事件名称不匹配 我怀疑这与反应性有关,但我被卡住了。代码如下: library(shiny) library(htmltools) libr

我正在学习如何使用Shiny,但遇到了一个问题

我试图通过调用
shinny.setInputValue('myEvent','open',{priority:'event'}),使ConditionalPanel打开

但是,面板没有打开。我检查了javascript事件是否被触发,因此看起来像:

  • setInputValue未出现
  • UI未接收到事件
  • 或者,事件名称不匹配
我怀疑这与反应性有关,但我被卡住了。代码如下:

library(shiny)
library(htmltools)
library(htmlwidgets)
library(leaflet)
library(leaflet.providers)

places = read.csv("file.csv")

names = places$Name

ui <- fluidPage(
   
    sidebarLayout(
        sidebarPanel(
            width = 3,
        ),
        
        mainPanel(
            width = 9,
            fluidRow(column(12, leafletOutput("mymap", height = 550))),
            conditionalPanel(condition = "input.myEvent == 'open'",
                             fluidRow(verbatimTextOutput("myEvent")))
        )
    )
)

server <- function(input, output) {
   
    output$mymap <- renderLeaflet({
                        
        mapdata = places[places$Name %in% names,]
        
        leaflet() %>%
             addProviderTiles(
                 providers$Esri.OceanBasemap,
                 options = providerTileOptions(noWrap = TRUE)
             ) %>%
            onRender("
                     function(el, x) {
                         this.on('popupopen', function(e) {
                             Shiny.setInputValue('myEvent', 'open', {priority: 'event'});
                         });

                         this.on('popupclose', function(e) {
                             Shiny.setInputValue('myEvent', 'close', {priority: 'event'});
                         });
                     }")%>%
            addMarkers( data = mapdata,
                        lng = mapdata$Longitude,
                        lat = mapdata$Latitude,
                        layerId = mapdata$Name,
                        popup = mapdata$Name,
                        options = popupOptions(closeButton = FALSE)) 

    })
}
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(htmltools)
库(htmlwidgets)
图书馆(单张)
图书馆(传单供应商)
places=read.csv(“file.csv”)
名称=位置$Name
ui%
添加标记(数据=地图数据,
lng=mapdata$Longitude,
lat=地图数据$纬度,
layerId=mapdata$Name,
popup=mapdata$Name,
选项=弹出选项(关闭按钮=假))
})
}
shinyApp(用户界面=用户界面,服务器=服务器)

使用
创建的
输入值
闪亮。setInputValue
可以触发条件面板,如此基本应用程序所示:

library(shiny)

shinyApp(
  ui = basicPage(
    actionButton(
      "x", "X", onclick = "Shiny.setInputValue('test', true);"
    ),
    conditionalPanel(
      "input.test === true",
      div("Hello")
    )
  ),
  server = function(input, output){
    observe(print(input[["test"]]))
  }
)

应用程序中的一个问题是
逐字输出(“myEvent”)
,它不呈现任何内容,因为
服务器中没有
输出[[“myEvent”]]
。因此,有可能条件面板可以工作(因为您的应用程序依赖于CSV文件,我们无法尝试),但此面板仍然是空的。

您能否提供一个不读取CSV文件的示例?这样我们就可以试试了。你的输入在哪里?我把verbatimtexoutput()切换到h1()就可以了。所以答案是正确的。之前,面板呈现为灰色,因此我假设即使没有内容,它也会可见。