我有一个用shiny和reactable包创建的仪表板。我想用Reactable.getState将表中显示的数据下载到一个Excel文件中,问题是,只有在内部表被展开时,我才能获得它们的数据。
下面的示例显示了第一行内表的此问题。
如果单击Get数据,它将显示NULL。
如果展开第一行并单击Get data,它将显示内表的数据。
有没有一种方法可以获得内部表的数据而不展开它?
library(shiny)
library(reactable)
library(jsonlite)
data <- as.data.frame(unique(MASS::Cars93[, 1]))
registerInputHandler(
"xx",
function(data, ...){
fromJSON(toJSON(data))
},
force = TRUE
)
ui <- fluidPage(
fluidRow(
column(
7,
tags$button(
"Get data",
onclick = '
var state = Reactable.getState("cars1");
Shiny.setInputValue("dat:xx", state.sortedData);
'
),
reactableOutput("cars")
),
column(
5,
verbatimTextOutput("data")
)
)
)
server <- function(input, output){
output$cars <- renderReactable({
reactable(data, details = function(index){
part_data <- MASS::Cars93[MASS::Cars93[, 1] == data[index, 1], 2:5]
htmltools::div(style = "padding: 1rem",
reactable(part_data, outlined = TRUE, elementId = paste0('cars', index))
)}, filterable = TRUE)
})
output$data <- renderPrint({
input$dat
})
}
shinyApp(ui, server)发布于 2022-09-12 07:38:54
您可以在Reactable.toggleAllRowsExpanded("cars")代码中执行JavaScript来展开行,然后将表发送到闪亮的服务器,然后折叠行:
onclick = '
Reactable.toggleAllRowsExpanded("cars");
var state = Reactable.getState("cars1");
Shiny.setInputValue("dat:xx", state.sortedData);
Reactable.toggleAllRowsExpanded("cars");
'https://stackoverflow.com/questions/73606333
复制相似问题