微調反應性

案例研究:使用 R 的 Shiny 建置網頁應用程式

Dean Attali

Shiny Consultant

反應性複習

  • reactive()input$ 都是反應式
  • 依賴反應式變數的程式碼會在相依項更新時重新執行
  • 存取反應值會將其納入相依項
x <- reactive({
    y() * input$num1 * input$num2
})
案例研究:使用 R 的 Shiny 建置網頁應用程式

isolate

  • isolate() 避免建立反應式相依
  • isolate() 內的反應值改變,不會觸發任何事
x <- reactive({
    y() * isolate({ input$num1 }) * input$num2
})
x <- reactive({
    y() * isolate({ input$num1 * input$num2 })
})
案例研究:使用 R 的 Shiny 建置網頁應用程式

全部 isolate

  • 有時你會想隔離所有反應式

    x <- reactive({
        isolate({
            y() * input$num1 * input$num2
        })
    })
    
  • 需要一種方式在需要時觸發 x 重新執行

案例研究:使用 R 的 Shiny 建置網頁應用程式

動作按鈕

actionButton(inputId, label, ...)

chapter4_4_fine_tune_the_activity.025.png

  • 只有一種簡單互動:點擊
  • 按鈕的值是被點擊的次數
# 點擊按鈕兩次後
str(input$button)
int 2
案例研究:使用 R 的 Shiny 建置網頁應用程式

以動作按鈕觸發反應

  • 在 server 端存取按鈕輸入值會觸發反應性

  • 在 UI 加入按鈕

    actionButton(inputId = "calculate_x", label = "Calculate x!")
    
  • 存取按鈕以建立相依關係

    x <- reactive({
        input$calculate_x
    
        isolate({
            y() * input$num1 * input$num2
        })
    })
    
案例研究:使用 R 的 Shiny 建置網頁應用程式

一起來練習吧!

案例研究:使用 R 的 Shiny 建置網頁應用程式

Preparing Video For Download...