这是代码片段,问题是:如何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)
编辑:您修改了问题以询问是否可以没有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)