ปรับแต่ง Reactivity

กรณีศึกษา: การสร้างเว็บแอปพลิเคชันด้วย Shiny ใน R

Dean Attali

Shiny Consultant

ทบทวน Reactivity

  • reactive() และ input$ มีความเป็น reactive
  • โค้ดที่ขึ้นอยู่กับตัวแปร reactive จะรันใหม่เมื่อ dependency อัปเดต
  • การเข้าถึงค่า reactive ทำให้มันกลายเป็น dependency
x <- reactive({
    y() * input$num1 * input$num2
})
กรณีศึกษา: การสร้างเว็บแอปพลิเคชันด้วย Shiny ใน R

Isolate

  • ใช้ isolate() เพื่อไม่ให้สร้าง reactive dependency
  • หากค่า reactive ภายใน isolate() เปลี่ยนแปลง จะไม่มีอะไรเกิดขึ้น
x <- reactive({
    y() * isolate({ input$num1 }) * input$num2
})
x <- reactive({
    y() * isolate({ input$num1 * input$num2 })
})
กรณีศึกษา: การสร้างเว็บแอปพลิเคชันด้วย Shiny ใน R

Isolate ทุกอย่าง

  • บางครั้งต้องการ isolate ทุก reactive

    x <- reactive({
        isolate({
            y() * input$num1 * input$num2
        })
    })
    
  • ต้องการวิธีกระตุ้นให้ x รันใหม่ตามต้องการ

กรณีศึกษา: การสร้างเว็บแอปพลิเคชันด้วย Shiny ใน R

Action buttons

actionButton(inputId, label, ...)

chapter4_4_fine_tune_the_activity.025.png

  • มีการโต้ตอบเพียงอย่างเดียว: คลิก
  • ค่าของปุ่มคือจำนวนครั้งที่ถูกคลิก
# After clicking on a button twice
str(input$button)
int 2
กรณีศึกษา: การสร้างเว็บแอปพลิเคชันด้วย Shiny ใน R

Action buttons ในฐานะตัวกระตุ้น Reactivity

  • การเข้าถึงค่า input ของปุ่มใน server จะกระตุ้น reactivity

  • เพิ่มปุ่มใน UI

    actionButton(inputId = "calculate_x", label = "Calculate x!")
    
  • เข้าถึงปุ่มเพื่อให้กลายเป็น dependency

    x <- reactive({
        input$calculate_x
    
        isolate({
            y() * input$num1 * input$num2
        })
    })
    
กรณีศึกษา: การสร้างเว็บแอปพลิเคชันด้วย Shiny ใน R

มาฝึกกันเถอะ!

กรณีศึกษา: การสร้างเว็บแอปพลิเคชันด้วย Shiny ใน R

Preparing Video For Download...