使用sliderValues进行操作时,dataTableOutput Flink

qlckcl4x  于 2022-12-30  发布在  Flink
关注(0)|答案(1)|浏览(136)

在一个漂亮的应用程序中,我使用sliderInput向数据表添加了React值:

library(shiny)
library(shinyWidgets)
library(DT)

ui <- fluidPage(
  sliderInput("a", "A", min = 0, max = 3, value = 0, width = "250px"),
  titlePanel("Sliders"),
  dataTableOutput("sliderValues", width="450px")
)
server <- function(input, output, session) {
  
  sliderValues <- reactive({
    df <- data.frame(
      Name = "A", 
      Value = as.character(c(input$a)), 
      stringsAsFactors = FALSE) %>% 
      pivot_wider(names_from = Name, values_from = Value)
    
    return(df)
  })

  
  # Show the values in an HTML table in a wider format----
  output$sliderValues <- DT::renderDataTable({
    DT::datatable(sliderValues(),
                  extensions = c('Buttons'),
                  options = list(
                    dom = 'frtBip',
                    buttons = list(list(extend = 'excel', filename = paste0("myname-", Sys.Date())))
                  )
    )
  })

}
shinyApp(ui, server)

通过这样做,我意识到每当我移动滑块时,表格** Flink **。这是什么原因?我们如何解决这个问题?
下面是一个我所谈论的例子。注意在gif的中间到结尾 Flink 的3个点:

u4dcyp6a

u4dcyp6a1#

您可以使用dataTableProxy,这样只有数据会被推送到客户机,而不是每次都使用您所拥有的普通方法重新创建对象。我还将processing=FALSE添加到选项中,这样它就不会创建其他消息,例如Processing...

library(shiny)
library(shinyWidgets)
library(DT)
library(tidyr)

ui <- fluidPage(
  sliderInput("a", "A", min = 0, max = 3, value = 0, width = "250px"),
  titlePanel("Sliders"),
  DT::DTOutput(outputId = "sliderValues", width="450px")
)
server <- function(input, output, session) {
  
  sliderValues <- reactive({
    df <- data.frame(
      Name = "A", 
      Value = as.character(c(input$a)), 
      stringsAsFactors = FALSE) %>% 
      pivot_wider(names_from = Name, values_from = Value)
    return(df)
  })
  
  
  # Show the values in an HTML table in a wider format----
  output$sliderValues <- DT::renderDT({
    DT::datatable(isolate(sliderValues()),
                  extensions = c('Buttons'),
                  options = list(processing=FALSE,
                    dom = 'frtBip',
                    buttons = list(list(extend = 'excel', filename = paste0("myname-", Sys.Date())))
                  )
    )
  })
  
  
  proxy <- dataTableProxy('sliderValues')
  
  observe({
    replaceData(proxy, sliderValues())
  })
  
}
shinyApp(ui, server)

相关问题