Study
Shiny

observeEvent & eventReactive

Penjelasan

reactive() dan render*() otomatis bereaksi terhadap SEMUA input yang dipakai di dalamnya — kadang kamu justru ingin aksi hanya terjadi saat event spesifik, misalnya tombol diklik, bukan setiap kali user mengetik di textInput. observeEvent(input$tombol, {...}) menjalankan blok kode (efek samping seperti menyimpan file atau print) HANYA saat input$tombol berubah (biasanya actionButton), mengabaikan perubahan input lain di dalam blok tersebut. eventReactive(input$tombol, {...}) mirip tapi mengembalikan NILAI reaktif (seperti reactive()), cocok dipakai saat kamu ingin komputasi baru dijalankan hanya setelah user menekan tombol 'Proses', bukan otomatis tiap ketik.

Contoh Konsep

library(shiny)

ui <- fluidPage(
  textInput("teks", "Masukkan teks:"),
  actionButton("proses", "Proses"),
  textOutput("hasil")
)

server <- function(input, output) {
  hasil_proses <- eventReactive(input$proses, {
    toupper(input$teks)
  })

  output$hasil <- renderText({
    hasil_proses()
  })

  observeEvent(input$proses, {
    message("Tombol proses diklik!")
  })
}

shinyApp(ui = ui, server = server)

Praktikum

Lengkapi eventReactive agar teks hanya dibalik (pakai paste(rev(strsplit(x, "")[[1]]), collapse = "")) saat tombol 'balik' diklik.

Editor Latihan

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

Tips

Pakai observeEvent untuk efek samping (menyimpan data, print log, update UI), dan eventReactive untuk nilai yang dipakai output — jangan tertukar, karena observeEvent tidak bisa 'dipanggil' seperti reactive expression.