Cette question est liée à cette une. Les deux peuvent générer les mêmes fonctionnalités, mais la mise en œuvre est légèrement différente. Une différence importante est que l' reactiveValue
est un conteneur qui peut avoir plusieurs valeurs, comme input$
. Dans le brillant de la documentation fonctionnalité est généralement mis en oeuvre à l'aide de reactive()
, mais dans la plupart des cas, je trouve reactiveValues()
plus pratique. Est-il un piège ici? Existe-il d'autres différences majeures entre les deux que je ne sois pas au courant? Ce sont ces deux extraits de code équivalent?
Voir le même exemple de code mis en œuvre à l'aide de:
-
un réactif de l'expression:
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)
-
un réactif de valeur:
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)