R Shiny:观察事件和事件反应的不同行为

问题描述

下面的闪亮应用程序显示一个使用rhandsontable()构建的可编辑表格。

问题:您能解释一下为什么在从未打印"ping"的情况下对数据表进行编辑时将"pong"打印到控制台的原因。

library(shiny)

ui <- fluidPage(
  rhandsontable::rHandsontableOutput(
    outputId = "data")
)

server <- function(input,output,session) {
  
  data <- data.frame(a = 1,b = 2,c = 3)
  
  output$data <- rhandsontable::renderRHandsontable({
    rhandsontable::rhandsontable(
      selectCallback = TRUE,data = data)
  })
  
  observeEvent(input$data$changes$changes,{
    print("ping")
  })
  
  edits <- eventReactive(input$data$changes$changes,{
    print("pong")
  })
  
}

shinyApp(ui = ui,server = server)

解决方法

这是因为此后没有调用edits(),所以shiny认为您不需要它,因此没有理由对其进行任何工作,您需要添加它应该去的地方或内容您想使用它:

library(shiny)

ui <- fluidPage(
    rhandsontable::rHandsontableOutput(
        outputId = "data")
)

server <- function(input,output,session) {
    
    data <- data.frame(a = 1,b = 2,c = 3)
    
    output$data <- rhandsontable::renderRHandsontable({
        rhandsontable::rhandsontable(
            selectCallback = TRUE,data = data)
    })
    
    observeEvent(input$data$changes$changes,{
        print("ping")
    })
    
    edits <- eventReactive(input$data$changes$changes,{
        print("pong")
    })
    
    observe({
        edits()
    })
    
}

shinyApp(ui = ui,server = server)