出于某种原因,我需要嵌套模块。我将button传递给嵌套模块mod_coordinates_server,但是当我单击该按钮点时,地图上不会显示这些点。我在这里使用了reactive并正确传递了按钮-当您取消注释print(btn()) (在observeEvent中)时,您将看到值正确地返回到控制台。这意味着按钮可以正常工作。那么,为什么它不适用于积分呢?是命名空间有问题吗?
下面是工作示例:
library(shiny)
library(mapboxer)
library(dplyr)
library(sf)
moduleServer <- function(id, module) {
callModule(module, id)
}
# UI #
mod_btn_UI <- function(id) {
ns <- NS(id)
tagList(
actionButton(ns("btn"), "Click me!"),
mod_coordinates_UI(ns("proxyMap"))
)
}
# Server #
mod_btn_server <- function(id){
moduleServer(id, function(input, output, session) {
btn <- reactive({input$btn})
mod_coordinates_server("proxyMap", btn)
})
}
# Module Coordinates
mod_coordinates_UI <- function(id) {
ns <- NS(id)
tagList(
mapboxerOutput(ns("map"))
)
}
mod_coordinates_server <- function(id, btn){
moduleServer(id, function(input, output, session) {
ns <- NS(id)
coords <- quakes %>%
sf::st_as_sf(coords = c("long","lat"), crs = 4326)
output$map <- mapboxer::renderMapboxer({
mapboxer::mapboxer(
style = mapboxer::basemaps$Mapbox$light_v10,
center = c(174.387636,-33.543557),
pitch = 5,
padding = 0,
zoom = 3)
})
observeEvent(btn(), {
# print(btn())
mapboxer::mapboxer_proxy(ns("map")) %>%
mapboxer::add_circle_layer(
id = "xyz",
source = mapboxer::as_mapbox_source(coords),
circle_color = "#952444",
circle_opacity = 0.7,
circle_radius = 6
) %>%
mapboxer::update_mapboxer()
})
})
}
# FINAL App #
ui <- fluidPage(
tagList(
mod_btn_UI("test-btn"))
)
server <- function(input, output, session) {
mod_btn_server("test-btn")
}
shinyApp(ui = ui, server = server)发布于 2021-03-21 00:46:29
在主应用程序中也调用第二个模块。尝尝这个
moduleServer <- function(id, module) {
callModule(module, id)
}
# UI #
mod_btn_UI <- function(id) {
ns <- NS(id)
tagList(
actionButton(ns("btn"), "Click me!")
)
}
# Server #
mod_btn_server <- function(id){
moduleServer(id, function(input, output, session) {
reactive({input$btn})
# mod_coordinates_server("proxyMap", btn)
})
}
# Module Coordinates
mod_coordinates_UI <- function(id) {
ns <- NS(id)
tagList(
mapboxerOutput(ns("map"))
)
}
mod_coordinates_server <- function(id, btn){
moduleServer(id, function(input, output, session) {
ns <- session$ns
coords <- quakes %>%
sf::st_as_sf(coords = c("long","lat"), crs = 4326)
output$map <- mapboxer::renderMapboxer({
mapboxer::mapboxer(
style = mapboxer::basemaps$Mapbox$light_v10,
center = c(174.387636,-33.543557),
pitch = 5,
padding = 0,
zoom = 3)
})
observeEvent(btn(), {
print(btn())
mapboxer::mapboxer_proxy(ns("map")) %>%
mapboxer::add_circle_layer(
id = "xyz",
source = mapboxer::as_mapbox_source(coords),
circle_color = "#952444",
circle_opacity = 0.7,
circle_radius = 6
) %>%
mapboxer::update_mapboxer()
})
})
}
# FINAL App #
ui <- fluidPage(
tagList(
mod_btn_UI("test-btn"),
mod_coordinates_UI("proxyMap")
)
)
server <- function(input, output, session) {
btn <- mod_btn_server("test-btn")
mod_coordinates_server("proxyMap", btn)
}
shinyApp(ui = ui, server = server)如果您希望保持嵌套,请尝试以下操作
library(shiny)
library(mapboxer)
library(dplyr)
library(sf)
Sys.setenv(MAPBOX_API_TOKEN = "pk.eyJ1IjoiaHdsIiwiYSI6ImNramJxY2YxcDV2YXoyeW40YXlvbmUyazQifQ.7HBEvMyrAnVpkKO7MNH7ww")
moduleServer <- function(id, module) {
callModule(module, id)
}
# UI #
mod_btn_UI <- function(id) {
ns <- NS(id)
tagList(
actionButton(ns("btn"), "Click me!"),
mod_coordinates_UI(ns("proxyMap"))
)
}
# Server #
mod_btn_server <- function(id){
moduleServer(id, function(input, output, session) {
# btn <- reactive({input$btn})
mod_coordinates_server("proxyMap", reactive({input$btn}))
})
}
# Module Coordinates
mod_coordinates_UI <- function(id) {
ns <- NS(id)
tagList(
mapboxerOutput(ns("map"))
)
}
mod_coordinates_server <- function(id, btn){
moduleServer(id, function(input, output, session) {
ns <- session$ns
coords <- quakes %>%
sf::st_as_sf(coords = c("long","lat"), crs = 4326)
output$map <- mapboxer::renderMapboxer({
mapboxer::mapboxer(
style = mapboxer::basemaps$Mapbox$light_v10,
center = c(174.387636,-33.543557),
pitch = 5,
padding = 0,
zoom = 3)
})
observeEvent(btn(), {
# print(btn())
mapboxer::mapboxer_proxy(ns("map")) %>%
mapboxer::add_circle_layer(
id = "xyz",
source = mapboxer::as_mapbox_source(coords),
circle_color = "#952444",
circle_opacity = 0.7,
circle_radius = 6
) %>%
mapboxer::update_mapboxer()
})
})
}
# FINAL App #
ui <- fluidPage(
tagList(
mod_btn_UI("test-btn"))
)
server <- function(input, output, session) {
mod_btn_server("test-btn")
}
shinyApp(ui = ui, server = server)

https://stackoverflow.com/questions/66722642
复制相似问题