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