我想将数据(静态)从 ui 传递到闪亮模块中的服务器。对于我正在处理的问题的具体示例,请考虑下面的应用程序。我希望能够使用按钮来旋转无线电输入。但是,因为我没有服务器中的 radioInput 选项,所以我无法使用下一个选项更新 radioInput。
当然有一些可能的解决方案。第一个是将radioInput 选项列表传递给服务器函数。我想避免在 ui 和 server 两个地方传递这些数据。第二个选项是使用 renderUI 并将选择列表从服务器传递到 ui,但鉴于 UI 没有动态方面,这也是不可取的。
有没有一种干净的方法可以将静态数据从 ui 传递到服务器?
library(shiny)
rotatingRadioInput <- function(id, label, choices = c('A' = 'a', 'B' = 'b'), selected = 'a') {
labelNames <- names(choices)
values <- unname(choices)
tagList(
radioButtons(NS(id, "radio"),
label = NULL,
choiceValues = values,
choiceNames = labelNames,
selected = selected
),
actionButton(NS(id, 'rotate'), 'rotate')
)
}
rotatingRadioServer <- function(id) {
moduleServer(id, function(input, output, session) {
observeEvent(input$rotate, {
updateRadioButtons(session, "radio", selected = "next radio option")
})
reactive({
input$radio
})
})
}
rotatingRadioApp <- function() {
ui <- fluidPage(
rotatingRadioInput("rotate"),
textOutput("value")
)
server <- function(input, output, server) {
rotatingValue <- rotatingRadioServer("rotate")
output$value <- renderText(paste0("Selected: ", rotatingValue()))
}
shinyApp(ui, server)
}