Study
Shiny

Reactive Expressions dengan reactive()

Penjelasan

Kalau ada perhitungan yang dipakai di beberapa output sekaligus, menulisnya berulang di setiap render*() itu boros dan rawan tidak konsisten. reactive({...}) membungkus perhitungan itu menjadi sebuah 'reactive expression' yang di-cache: hasilnya hanya dihitung ulang kalau input yang dipakai di dalamnya berubah, dan dipakai bersama oleh output manapun yang memanggilnya. Reactive expression dipanggil seperti fungsi (pakai kurung), misalnya data_terfilter(), bukan data_terfilter. Ini mirip computed property di framework reaktif lain — hemat komputasi dan menjaga logika tetap DRY (Don't Repeat Yourself).

Contoh Konsep

library(shiny)

ui <- fluidPage(
  sliderInput("n", "Jumlah:", 1, 100, 10),
  textOutput("rata"),
  textOutput("total")
)

server <- function(input, output) {
  data_acak <- reactive({
    rnorm(input$n)
  })

  output$rata <- renderText({
    paste("Rata-rata:", round(mean(data_acak()), 2))
  })

  output$total <- renderText({
    paste("Jumlah data:", length(data_acak()))
  })
}

shinyApp(ui = ui, server = server)

Praktikum

Buat reactive expression 'harga_total' yang menghitung input 'jumlah' dikali input 'harga_satuan', lalu pakai di dua output berbeda.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Jangan lupa tanda kurung saat memanggil reactive expression — data_acak() bukan data_acak. Lupa kurung adalah kesalahan paling umum pemula Shiny, dan biasanya memunculkan error tentang 'closure' bukan nilai.