我有一个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
了返回select
,onClick
但它不起作用。你有任何想法如何解决它吗?