我想要一个计数器,每次被调用时都会加一,并且我希望它仅在下次从另一个响应中调用时才递增。我正在尝试类似的事情,但是这段代码会生成无限循环。我做错了什么?
ui <- fluidPage(
textOutput("value")
)
server <- function(input, output, session) {
value <- reactiveVal(0)
valueText <- reactive({
newValue <- value()
cat('New Value: ', newValue, '\n')
value(newValue + 1)
return(paste0('Value: ', newValue))
})
output$value <- renderText({
valueText()
})
}
shinyApp(ui, server)
您可以将
reactiveVal()
绑定到多个输入,如本示例应用程序所示:
library(shiny)
ui <- fluidPage(
actionButton('foo', 'Foo-Button'),
selectInput('bar', 'Bar-Select', choices = letters),
textOutput('message')
)
server <- function(input, output) {
n <- reactiveVal(0)
observe({
n(n() + 1)
output$message <- renderPrint(n)
}) |>
bindEvent(list(input$foo, input$bar))
}
shinyApp(ui = ui, server = server)
恐怕您仍然需要枚举
bindEvent
中的输入元素,虽然 names(input)
返回它们的 inputId
。我不知道如何使用这些来访问 input
对象的(=所有)项目。