shinyApp(
ui = fluidPage(
useShinyjs(),
"Count:", textOutput("number", inline = TRUE), br(),
actionButton("start", "Start"), br(),
"The button will be pressed automatically every 3 seconds",br(),
actionButton("stop", "Stop"), br(),
"The counter will stop when the button is pressed"
),
server = function(input, output) {
observe(cat(str(reactiveValuesToList(input)), "\n"))
output$number <- renderText({
input$start
})
observe({
if (!input$stop) {
click("start")
invalidateLater(3000)
}
})
}
)
observe(cat(str(reactiveValuesToList(input)), "\n"))
- моя "блестящая хитрость для разработчиков", которая помогает мне увидеть, что происходит.input$stop
изначально 0
.При первом щелчке он увеличивается до 1
, и условие становится ложным.
См. Также этот ответ: https://stackoverflow.com/a/47486524/6197649
Изменить за ваш комментарий:
server = function(input, output, session) {
output$number <- renderText({
input$start
})
stop_2 <- reactiveVal(FALSE)
observeEvent(input$stop, stop_2(TRUE))
observeEvent(input$start, if (stop_2()) stop_2(FALSE))
observe({
if (isolate(!stop_2() && input$start)) click("start")
invalidateLater(3000)
})
}
Это обходной путь из-за невозможности сброса кнопки действия.