[英]Updating non-reactive values in R Shiny
我有以下示例:
library(shiny)
ui <- fluidPage(
textOutput("out"),
actionButton("plusX", "Increase X"),
actionButton("redraw", "redraw")
)
server <- function(input, output, session) {
x <- 0
observeEvent(input$plusX, {x <<- x+1})
output$out <- renderText({
input$redraw
x
})
}
shinyApp(ui, server)
这是否被认为是 Shiny 中的反模式以这种方式修改非反应性变量? 避免本身可能有问题的超级分配。
我知道这可以做到,例如使用 reactiveVal 来存储 X,并隔离以获得类似的结果。 第二种方式似乎更清晰,这将是我通常的选择,但我想知道第一种方式是否有任何警告,或者有可能这样做。
library(shiny)
ui <- fluidPage(
textOutput("out"),
actionButton("plusX", "Increase X"),
actionButton("redraw", "redraw")
)
server <- function(input, output, session) {
x <- reactiveVal(0)
observeEvent(input$plusX, {x(x()+1)})
output$out <- renderText({
input$redraw
isolate(x())
})
}
shinyApp(ui, server)
在此示例中,两个代码之间没有重要区别,因为您没有使用 ReactiveVal 的好处。
ReactiveVal 的好处是它具有反应性,因此可以与其他反应性元素交互。
例如,尝试在您的代码中添加一个依赖于 x 的表:
output$tab <- renderTable({data.frame(y = x)})
(x() 在 ReactiveVal 的情况下)
您将看到不同之处在于,在 ReactiveVal 的情况下,表会自动使用 plusX 更新,而在常规变量的情况下,它不会更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.