Reaktivitas 101

Studi Kasus: Membangun Aplikasi Web dengan Shiny di R

Dean Attali

Shiny Consultant

Dasar reaktivitas

  • Shiny menggunakan pemrograman reaktif
  • Output bereaksi terhadap perubahan input
  • Saat nilai variabel x berubah, apa pun yang bergantung pada x dihitung ulang
  • Bandingkan dengan R biasa:

    x <- 5
    y <- x + 1
    x <- 10
    
  • Berapa nilai y? 6 atau 11?

Studi Kasus: Membangun Aplikasi Web dengan Shiny di R

Variabel reaktif

  • Semua input bersifat reaktif
  • input$<inputId> di dalam fungsi render akan memicu output untuk dirender ulang

    output$my_plot <- renderPlot({
        plot(rnorm( input$num ))
    })
    
  • output$my_plot bergantung pada input$num

    • input$num berubah ⇒

      output$my_plot bereaksi

Studi Kasus: Membangun Aplikasi Web dengan Shiny di R

Konteks reaktif

  • Nilai reaktif hanya bisa dipakai dalam konteks reaktif
  • Fungsi render*() apa pun adalah konteks reaktif
  • Mengakses nilai reaktif di luar konteks reaktif ⇒ error
server <- function(input, output) { 
    print(input$num)
}
ERROR: Operation not allowed without an active reactive context.
Studi Kasus: Membangun Aplikasi Web dengan Shiny di R

Observasi variabel reaktif

  • observe({ ... }) untuk mengakses variabel reaktif

    server <- function(input, output) { 
        observe({ 
            print( input$num )  
        }) 
    }
    
  • Berguna untuk debugging, melacak variabel reaktif

  • Tiap variabel reaktif membuat dependensi
observe({ 
    print( input$num1 ) 
    print( input$num2 )
})
Studi Kasus: Membangun Aplikasi Web dengan Shiny di R

Buat variabel reaktif

  • reactive({ ... }) untuk membuat variabel reaktif

  • Salah:

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

    server <- function(input, output) { 
      x <- reactive({ 
          input$num + 1 
      })
    }
    
Studi Kasus: Membangun Aplikasi Web dengan Shiny di R

Variabel reaktif

  • Akses variabel reaktif kustom seperti fungsi:
    • tambahkan tanda kurung ()
server <- function(input, output){
    x <- reactive({
        input$num + 1
    }) 
    observe({ 
        print( input$num )
        print( x() ) 
    })
}
Studi Kasus: Membangun Aplikasi Web dengan Shiny di R

Ayo berlatih!

Studi Kasus: Membangun Aplikasi Web dengan Shiny di R

Preparing Video For Download...