我有一个应用程序,使用reactable渲染一些数据,并在Map中显示相同的数据(使用传单)。
表格对象是可选择的,并且在Map中示出所选择的行。
当我清除表中的选择(使用actionButton)时,我希望渲染原始Map(所有数据点)。
下面是一个地震数据集的工作示例。
library(shiny)
library(leaflet)
library(reactable)
ui <- fluidPage(
reactableOutput("t"),
actionButton(inputId = "clean", label="Clear selection"),
leafletOutput("m")
)
server <- function(input, output) {
output$t <- renderReactable({
reactable(quakes[1:10,],
selection = "multiple")
})
output$m <- renderLeaflet({
leaflet(quakes[1:100,]) %>%
addTiles() %>%
addMarkers()
})
observeEvent(input$clean,
list( updateReactable("t", selected = NA),
leafletProxy("m", data = quakes) %>%
addMarkers())
)
observeEvent(getReactableState("t","selected"),
leafletProxy("m", data = quakes[getReactableState("t","selected"),]) %>%
clearMarkers() %>%
addMarkers()
)
}
shinyApp(ui,server)
当我尝试使用模块编写相同的应用程序时,它不起作用。下面是众多尝试之一。
我正在尝试使用模块,因为这是一个更大的应用程序的一部分,它会使它更容易管理...
library(shiny)
library(leaflet)
library(reactable)
tUI <- function(id){
ns <- NS(id)
tagList(
reactableOutput(outputId = ns("t")),
actionButton(ns("clean"), label="Clear selection")
)
}
tServer <- function(id, mapa){
moduleServer(id,
function(input, output, session){
output$t <- renderReactable({
reactable(quakes[1:10,],
selection = "multiple"
)
})
observeEvent(input$clean, {
list(
updateReactable("t", selected = NA)#,
# leafletProxy(mapa(), data = quakes) %>%
# addMarkers())
)})
}
)
}
mUI <- function(id){
ns <- NS(id)
tagList(
leafletOutput(ns("m"))
)
}
mServer <- function(id){
moduleServer(id,
function(input, output, session){
output$m <- renderLeaflet({
leaflet(quakes[1:100,]) %>%
addTiles() %>%
addMarkers()
})
m2 <- reactive("m")
})}
##########################################################
ui <- fluidPage(
tUI("tt"),
mUI("mm")
)
server <- function(input, output) {
ttt <- tServer("tt", mmm$m2)
mmm <- mServer("mm")
}
shinyApp(ui,server)
有什么需要帮忙的吗?谢谢
1条答案
按热度按时间e0bqpujr1#
为了在模块之间进行交互,您需要从一个模块返回React对象并将其输入到另一个模块。这里,我从
tServer
模块返回了clean
和getReactableState
,并将其输入到mServer
。对于这个概念的介绍,您可能会发现my tutorial on shiny modules很有帮助。