R闪亮两次激活带有反应性值的操作按钮

时间:2019-02-25 04:04:04

标签: r shiny reactive action-button

我有以下闪亮的应用程序

server <- function(input, output, session) {
  rv <- reactiveValues(i = 0)

  output$myplot <- renderPlotly({
    dt = data.frame(x = 1:10, y = rep(rv$i,10))
    plot_ly(dt, x = ~x, y =~y) 
  })

  observeEvent(input$run,{
    rv$i <- 0
    observe({
      isolate({rv$i = rv$i + 1})
      if (rv$i < 10){invalidateLater(1000, session)}
    })
  })
}

ui <- fluidPage(
  actionButton("run", "START"),
  plotlyOutput("myplot")
)

shinyApp(ui = ui, server = server)

动作按钮可以正常工作一次:如果单击它,则情节将得到更新。但是问题是我无法两次单击它,因为它会使应用程序崩溃。

我希望每次单击动作按钮时,rv $ i的值都回到0,然后动画重新开始。

1 个答案:

答案 0 :(得分:1)

将观察者放在另一个观察者中不是一个好主意。只需将内部观察者放在外面,它将起作用。

library(shiny)
library(plotly)

server <- function(input, output, session) {
  rv <- reactiveValues(i = 0)

  output$myplot <- renderPlotly({
    dt = data.frame(x = 1:10, y = rep(rv$i,10))
    plot_ly(dt, x = ~x, y =~y, mode = "markers", type = 'scatter') 
  })

  observeEvent(input$run,{
    rv$i <- 0
  })

  observe({
    isolate({rv$i = rv$i + 1})
    if (rv$i < 10){invalidateLater(1000, session)}
  })

}

ui <- fluidPage(
  actionButton("run", "START"),
  plotlyOutput("myplot")
)

shinyApp(ui = ui, server = server)