【发布时间】:2021-04-07 12:10:28
【问题描述】:
我有以下例子:
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)
【问题讨论】:
-
为什么说
<<-可能有问题?我在您的应用中没有发现任何问题。 -
有问题的意思是你打破了观察的范围,在我看来,我认为作为一般的编程共识,应该尽可能避免。该应用程序运行良好,我只是想如果在第一种情况下修改非反应性值或这种方法中的任何已知警告可能会导致任何特定问题。