带Shiny的r-DT:防止表输出在编辑后重新加载到第一页



中提出的代码https://stackoverflow.com/a/57396067/8648160

library(shiny)
library(DT)
shinyApp(
ui = fluidPage(
DTOutput('x1'),
verbatimTextOutput("print")
),
server = function(input, output, session) {
dat <- reactiveVal(cbind(iris, Date = Sys.time() + seq_len(nrow(iris))))
output$x1 = renderDT(isolate(dat()), selection = 'none', editable = TRUE)
proxy = dataTableProxy('x1')
observeEvent(input$x1_cell_edit, {
info = input$x1_cell_edit
dat(editData(dat(), info, proxy, resetPaging = FALSE))
})
output$print <- renderPrint({
dat()
})
}
)

上传文件时不起作用。


library(shiny)
library(DT)
shinyApp(
ui = fluidPage(
fileInput("file", label = "Upload data", accept = ".csv"),
DTOutput('x1'),
verbatimTextOutput("print")
),
server = function(input, output, session) {
dat <- reactiveVal()
observeEvent(input$file, {
req(input$file)
table <- read.csv(input$file$datapath)
dat(table)
})
output$x1 = renderDT(isolate(dat()), selection = 'none', editable = TRUE)
proxy = dataTableProxy('x1')
observeEvent(input$x1_cell_edit, {
info = input$x1_cell_edit
dat(editData(dat(), info, proxy, resetPaging = FALSE))
})
output$print <- renderPrint({
dat()
})
}
)

问题似乎来自隔离(…(,因为数据是在observeEvent函数内部更新的。

如有任何帮助,将不胜感激

使用req应该可以做到这一点:

output$x1 <- renderDT({
req(dat())
datatable(
isolate(dat()), selection = 'none', editable = TRUE
)
})

最新更新