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.
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.