在反应式创建无限循环中单调递增计数器

问题描述 投票:0回答:1

我想要一个计数器,每次被调用时都会加一,并且我希望它仅在下次从另一个响应中调用时才递增。我正在尝试类似的事情,但是这段代码会生成无限循环。我做错了什么?

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)
r shiny
1个回答
0
投票

您可以将

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
对象的(=所有)项目。

© www.soinside.com 2019 - 2024. All rights reserved.