更新reactiveValues这个答案是在/observeEvent模型出现之前发布的shiny。我认为@MikeWise 的答案是更好的方法。
在玩了一些之后,这就是我想出的。ui.r 没什么特别的
用户界面
library(shiny)
ui <- shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
selectizeInput(inputId="XX", label="Choose a letter",choices=letters[1:5])
),
mainPanel(
textOutput("Current"),
textOutput("old")
)
)
))
"Current"将显示当前选择并"old"显示先前选择。
在server.r我使用了三个关键功能reactiveValues:isolate和session$onFlush。
服务器.r
library(shiny)
server <- function(input, output,session) {
Values<-reactiveValues(old="Start")
session$onFlush(once=FALSE, function(){
isolate({ Values$old<-input$XX })
})
output$Current <- renderText({paste("Current:",input$XX)})
output$old <- renderText({ paste("Old:",Values$old) })
}
像这样的server.r作品。
首先,Values$old是使用reactiveValues函数创建的。我给了它“开始”的值,以明确加载时发生了什么。
然后我添加了一个session$onFlush功能。请注意,我session的函数中有一个参数server。这将在每次闪亮刷新反应系统时运行 - 例如当selectizeInput用户更改时。重要的是它会在input$XX获得新值之前运行 - 因此该值已更改为 atselectizeInput而不是 at XX。
然后在I 内部分配tosession$onFlush的传出值。这是在内部完成的,因为这将防止使用新值更新时出现任何问题。然后我可以在函数中使用和。XXValues$oldisolate()input$XXinput$XXValues$oldrenderText()