Fine tune the reactivity

Case Studies: Building Web Applications with Shiny in R

Dean Attali

Shiny Consultant

Reactivity review

  • reactive() and input$ are reactive
  • Code depending on reactive variables re-runs when dependencies update
  • Accessing reactive value makes it dependency
x <- reactive({
    y() * input$num1 * input$num2
})
Case Studies: Building Web Applications with Shiny in R

Isolate

  • Use isolate() to not create reactive dependency
  • If reactive value inside isolate() is modified, nothing happens
x <- reactive({
    y() * isolate({ input$num1 }) * input$num2
})
x <- reactive({
    y() * isolate({ input$num1 * input$num2 })
})
Case Studies: Building Web Applications with Shiny in R

Isolate everything

  • Sometimes you want to isolate all reactives

    x <- reactive({
        isolate({
            y() * input$num1 * input$num2
        })
    })
    
  • Need a way to trigger x to re-run on demand

Case Studies: Building Web Applications with Shiny in R

Action buttons

actionButton(inputId, label, ...)

chapter4_4_fine_tune_the_activity.025.png

  • Only one simple interaction: click
  • Value of button is number of times it was clicked
# After clicking on a button twice
str(input$button)
int 2
Case Studies: Building Web Applications with Shiny in R

Action buttons as reactivity triggers

  • Accessing button input value in server triggers reactivity

  • Add button to UI

    actionButton(inputId = "calculate_x", label = "Calculate x!")
    
  • Access button to make it dependency

    x <- reactive({
        input$calculate_x
    
        isolate({
            y() * input$num1 * input$num2
        })
    })
    
Case Studies: Building Web Applications with Shiny in R

Let's practice!

Case Studies: Building Web Applications with Shiny in R

Preparing Video For Download...