如何使reactive() 内部的值发生变化,具体取决于该reactive() 内部的observeEvent()

Cla*_*d H 5 r shiny

这是代码片段,问题是:如何observeEvent()在 a 中reactive()更改a值?

编辑:真正的问题是,“没有reactiveValues()吗?

ui <- fluidPage(
  actionButton("btn_change", "Change Values"),
  actionButton("btn_print","Print values")
)

server <- function(input, output) {
    a <- 1
    data <- reactive({
      observeEvent(input$btn_change, {
        a <- a + 1
      })
      a
    })

  observeEvent(input$btn_print, {
    print(paste("data = ", data()))
  })
}

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

Flo*_*ian 5

编辑:您修改了问题以询问是否可以没有reactiveValues。在这种特定情况下,是的,因为每次单击操作按钮时,它的值都会增加 1。上一个reactiveValues更广泛适用的答案显示在这篇文章的底部。

library(shiny)
ui <- shinyUI(
  fluidPage(
    actionButton("btn_change", "Change Values"),
    actionButton("btn_print","Print values")
  )
)

server <- function(input, output) {
  a <- 1

  data <- reactive({
    a + input$btn_change 
  })

  observeEvent(input$btn_print, {
    print(paste("data = ", data()))
  })

}

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

编辑。根据您的评论修改了解决方案

我认为您想要做的是每次单击按钮时增加反应的值。您可以通过使用reactiveVal 来实现这一点。您可以通过执行 获取其值x(),并通过 设置其值x(1),其中x是反应值的名称。

请注意,您可以在您的反应式中使用这个 reactval()。每当您单击按钮时,reactiveval 都会增加,这将触发您的反应性计算。

library(shiny)
ui <- shinyUI(
  fluidPage(
    actionButton("btn_change", "Change Values"),
    actionButton("btn_print","Print values")
  )
)

server <- function(input, output) {
  a <- 1

  data <- reactiveVal()
  data(a)

  observeEvent(input$btn_change, {
    old_value = data()
    data(old_value+1)
  })

  your_reactive <- reactive({
    data()*2+1
  })


  observeEvent(input$btn_print, {
    print(paste("data = ", your_reactive()))
  })

}

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)