这个问题与 这个有关。两者可以生成相同的功能,但实现略有不同。一个重要的区别是 reactiveValue
是一个可以有多个值的容器,比如 input$
。在 闪亮的文件中,功能通常使用 reactive()
来实现,但在大多数情况下,我发现 reactiveValues()
更方便。有什么隐情吗?这两者之间还有什么我没注意到的重大区别吗?这两个代码片段是等价的吗?
请参阅使用以下方法实现的相同 示例代码:
一种反应性的表情:
library(shiny)
ui <- fluidPage(
shiny::numericInput(inputId = 'n',label = 'n',value = 2),
shiny::textOutput('nthValue'),
shiny::textOutput('nthValueInv')
)
fib <- function(n) ifelse(n<3, 1, fib(n-1)+fib(n-2))
server<-shinyServer(function(input, output, session) {
currentFib <- reactive({ fib(as.numeric(input$n)) })
output$nthValue <- renderText({ currentFib() })
output$nthValueInv <- renderText({ 1 / currentFib() })
})
shinyApp(ui = ui, server = server)
a reactive value:
library(shiny)
ui <- fluidPage(
shiny::numericInput(inputId = 'n',label = 'n',value = 2),
shiny::textOutput('nthValue'),
shiny::textOutput('nthValueInv')
)
fib <- function(n) ifelse(n<3, 1, fib(n-1)+fib(n-2))
server<-shinyServer(function(input, output, session) {
myReactives <- reactiveValues()
observe( myReactives$currentFib <- fib(as.numeric(input$n)) )
output$nthValue <- renderText({ myReactives$currentFib })
output$nthValueInv <- renderText({ 1 / myReactives$currentFib })
})
shinyApp(ui = ui, server = server)