Reactive Values: reactiveVal & reactiveValues
Penjelasan
input$x bersifat read-only — kamu tidak bisa mengubah nilainya langsung dari server. Untuk menyimpan state yang bisa diubah sendiri oleh logika server (misalnya counter, atau riwayat aksi user), Shiny menyediakan reactiveVal() (untuk satu nilai tunggal) dan reactiveValues() (untuk beberapa nilai sekaligus, diakses mirip list dengan operator $). reactiveVal mengembalikan sebuah fungsi: panggil counter() untuk membaca, dan counter(nilai_baru) untuk mengubah. reactiveValues() dipakai seperti rv$nama <- nilai untuk mengubah dan rv$nama untuk membaca.
Contoh Konsep
library(shiny)
ui <- fluidPage(
actionButton("tambah", "Tambah"),
actionButton("reset", "Reset"),
textOutput("nilai_counter")
)
server <- function(input, output) {
counter <- reactiveVal(0)
observeEvent(input$tambah, {
counter(counter() + 1)
})
observeEvent(input$reset, {
counter(0)
})
output$nilai_counter <- renderText({
paste("Nilai:", counter())
})
}
shinyApp(ui = ui, server = server)
Praktikum
Buat reactiveValues 'rv' dengan field 'skor' awal 0, tambahkan 10 setiap tombol 'poin' diklik.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
reactiveVal dan reactiveValues hanya boleh dibuat SEKALI di awal fungsi server (bukan di dalam observeEvent atau reactive lain), supaya state-nya tidak ter-reset ulang setiap kali reactive context lain dijalankan.