首页 > 解决方案 > 如何从表中的选定行返回数据?

问题描述

我有一个reactable表格并尝试显示选定行的信息。实际上,我可以轻松地使用onClick="select"并将数据存储为响应式使用getReactableState,但我的情况略有不同。我为每一行添加了“保存”按钮,并使用一些 JS 从给定行返回数据。现在我想单独返回数据 - 使用“保存”按钮并连续单击。不幸的是,当我单击某行时,不会返回任何数据(不显示output$text)。如果我使用如下示例中的 JS,如何通过单击一行来显示行的数据?

这是一个可重现的例子。如果单击“保存”,则会出现窗口并显示数据。如果单击一行,则表格下方的面板中不会显示任何数据:

if (interactive()) {
    
    library(shiny)
    library(reactable)
    
    data <- cbind(MASS::Cars93[, 1:3], saveCol = NA)
    
    ui <- fluidPage(
        reactableOutput("table"),
        tags$h3('Row details to display if you click in a row:'),
        verbatimTextOutput("text")
    )
    
    server <- function(input, output) {
        
        selectedRow <- reactive(reactable::getReactableState("table", "selected"))
        
        output$table <- renderReactable({
            reactable(
                data,
                filterable = TRUE,
                searchable = TRUE,
                columns = list(
                    saveCol = colDef(
                        name = "",
                        sortable = FALSE,
                        cell = function() htmltools::tags$button("save")
                    )),
                #onClick = "select"
                onClick = htmlwidgets::JS(
                "function(rowInfo, colInfo) {
                    if (colInfo.id !== 'saveCol') {
                        return 'select'
                    }

                window.alert('Details for row ' + rowInfo.index + ':\\n' + JSON.stringify(rowInfo.row, null, 2))

                if (window.Shiny) {
                    Shiny.setInputValue('save', { index: rowInfo.index + 1 }, { priority: 'event' })
                    }
                }"
                )
            )
        })
        
        # display selected table's row
        output$text <- renderPrint({
            data[selectedRow(),]
        })
    }    
    shinyApp(ui, server)
}

如果您取消注释onClick="select"并评论 JS,onClick那么连续单击效果很好,但正如我所说,就我而言,我需要其他东西。在上面的代码中,我return 'select'首先添加if了返回selectonClick但它不起作用。你有任何想法如何解决它吗?

标签: rshinyreactable

解决方案


推荐阅读