Study
Shiny

UI Dinamis: conditionalPanel & renderUI

Penjelasan

Kadang kamu ingin elemen UI muncul/hilang tergantung nilai input lain, misalnya opsi tambahan hanya muncul kalau checkbox tertentu dicentang. Ada dua pendekatan: conditionalPanel(condition, ...) mengevaluasi kondisi dengan JavaScript langsung di browser (ditulis sebagai string, misalnya "input.tampilkan == true"), sehingga sangat cepat karena tidak perlu round-trip ke server. Pendekatan kedua, uiOutput("id") di UI dipasangkan dengan renderUI({...}) di server, membangun elemen UI sepenuhnya dari kode R — lebih fleksibel (bisa memakai logika R kompleks) tapi lebih lambat karena harus lewat server.

Contoh Konsep

library(shiny)

ui <- fluidPage(
  checkboxInput("lanjutan", "Tampilkan opsi lanjutan"),
  conditionalPanel(
    condition = "input.lanjutan == true",
    sliderInput("threshold", "Threshold:", 0, 100, 50)
  ),
  uiOutput("pesan_dinamis")
)

server <- function(input, output) {
  output$pesan_dinamis <- renderUI({
    if (isTRUE(input$lanjutan)) {
      strong("Mode lanjutan aktif")
    } else {
      em("Mode dasar")
    }
  })
}

shinyApp(ui = ui, server = server)

Praktikum

Lengkapi conditionalPanel agar textInput 'alasan' hanya muncul saat selectInput 'status' bernilai 'Ditolak'.

Editor Latihan

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

Tips

Pakai conditionalPanel untuk kondisi sederhana yang cukup dievaluasi di browser (lebih responsif), dan simpan renderUI untuk kasus yang benar-benar butuh logika R, misalnya membangun daftar pilihan dropdown dari hasil query database.