Button 闪亮的按钮只需要一次

Button 闪亮的按钮只需要一次,button,shiny,reactive,Button,Shiny,Reactive,我希望仅通过单击按钮首次触发事件。之后,我希望它是反应滑块输入 我尝试了以下方法: ui <- fluidPage( actionButton("go", "Go"), sliderInput("n", label = "Sample size", min = 1, max = 100, value = 10), plotOutput('samples') ) server <- function(input, output, session){ activate

我希望仅通过单击按钮首次触发事件。之后,我希望它是反应滑块输入

我尝试了以下方法:

  ui <- fluidPage(
  actionButton("go", "Go"),
  sliderInput("n", label = "Sample size", min = 1, max = 100, value = 10),
  plotOutput('samples')
)
server <- function(input, output, session){
  activate = reactive({FALSE})
  activate = eventReactive(input$go, {
    isolate(TRUE)
  })

  samples = eventReactive(activate(), {
    rnorm(input$n)
  })

  output$samples <- renderPlot({ hist(samples()) })

}
shinyApp(ui = ui, server = server)


有几种方法可以实现这一点

一种方法是将值存储在
reactiveValues()
中,或者只使用
req()
,如下所示

使用
eventReactive(activate(),…
的问题在于,只有在执行
activate()
时才会触发内部代码,而只有在单击
input$go
时才会发生这种情况

带有
req()
的可复制示例:

ui <- fluidPage(
  actionButton("go", "Go"),
  sliderInput("n", label = "Sample size", min = 1, max = 100, value = 10),
  plotOutput('samples')
)
server <- function(input, output, session){

  output$samples <- renderPlot({
    req(input$go > 0)
    hist(rnorm(input$n)) 
  })

}
shinyApp(ui = ui, server = server)
ui <- fluidPage(
  actionButton("go", "Go"),
  sliderInput("n", label = "Sample size", min = 1, max = 100, value = 10),
  plotOutput('samples')
)
server <- function(input, output, session){
  global <- reactiveValues(showPlot = FALSE)

  observeEvent(input$go, {
    global$showPlot <- TRUE
  })

  samples = reactive({
    rnorm(input$n)
  })

  output$samples <- renderPlot({
    req(global$showPlot)

    hist(samples()) 
  })

}
shinyApp(ui = ui, server = server)