Reactiviteit 101

Casestudies: webapplicaties bouwen met Shiny in R

Dean Attali

Shiny Consultant

Basis van reactiviteit

  • Shiny gebruikt reactive programming
  • Outputs reageren op wijzigingen in input
  • Als de waarde van x verandert, wordt alles dat x gebruikt herberekend
  • In tegenstelling tot regulier R:

    x <- 5
    y <- x + 1
    x <- 10
    
  • Wat is de waarde van y? 6 of 11?

Casestudies: webapplicaties bouwen met Shiny in R

Reactieve variabelen

  • Alle inputs zijn reactief
  • input$<inputId> binnen een render-functie triggert her-renderen

    output$my_plot <- renderPlot({
        plot(rnorm( input$num ))
    })
    
  • output$my_plot hangt af van input$num

    • input$num verandert ⇒

      output$my_plot reageert

Casestudies: webapplicaties bouwen met Shiny in R

Reactieve contexten

  • Reactieve waarden werken alleen binnen reactieve contexten
  • Elke render*()-functie is een reactieve context
  • Buiten een reactieve context een reactieve waarde gebruiken ⇒ fout
server <- function(input, output) { 
    print(input$num)
}
ERROR: Operation not allowed without an active reactive context.
Casestudies: webapplicaties bouwen met Shiny in R

Observeer een reactieve variabele

  • Gebruik observe({ ... }) om een reactieve variabele te benaderen

    server <- function(input, output) { 
        observe({ 
            print( input$num )  
        }) 
    }
    
  • Handig voor debuggen; volg een reactieve variabele

  • Elke reactieve variabele creëert een dependency
observe({ 
    print( input$num1 ) 
    print( input$num2 )
})
Casestudies: webapplicaties bouwen met Shiny in R

Maak een reactieve variabele

  • reactive({ ... }) om een reactieve variabele te maken

  • Fout:

    server <- function(input, output) {
        x <- input$num + 1
    }
    
    ERROR: Operation not allowed without an active reactive context.
    
  • Goed:

    server <- function(input, output) { 
      x <- reactive({ 
          input$num + 1 
      })
    }
    
Casestudies: webapplicaties bouwen met Shiny in R

Reactieve variabelen

  • Benader een eigen reactieve variabele als een functie:
    • zet er haakjes () achter
server <- function(input, output){
    x <- reactive({
        input$num + 1
    }) 
    observe({ 
        print( input$num )
        print( x() ) 
    })
}
Casestudies: webapplicaties bouwen met Shiny in R

Laten we oefenen!

Casestudies: webapplicaties bouwen met Shiny in R

Preparing Video For Download...