updateReactable() updates a reactable instance within a Shiny application.
Usage
updateReactable(
outputId,
data = NULL,
selected = NULL,
expanded = NULL,
page = NULL,
meta = NULL,
session = NULL
)Arguments
- outputId
The Shiny output ID of the
reactableinstance.- data
Table data. A data frame or matrix.
datashould have the same columns as the original table data. When updatingdata, the selected rows, expanded rows, and current page will reset unless explicitly specified. All other state will persist, including sorting, filtering, and grouping state.- selected
Selected rows. Either a numeric vector of row indices, or
NAto deselect all rows.- expanded
Expanded rows. Either
TRUEto expand all rows, orFALSEto collapse all rows.- page
The current page. A single, positive integer.
- meta
Custom table metadata. Either a named list with new values, or
NAto clear all metadata. New values are merged into the current metadata, so only the values specified inmetawill be updated.- session
The Shiny session object. Defaults to the current Shiny session.
Examples
# Run in an interactive R session
if (interactive()) {
library(shiny)
library(reactable)
data <- MASS::Cars93[, 1:7]
ui <- fluidPage(
actionButton("select_btn", "Select rows"),
actionButton("clear_btn", "Clear selection"),
actionButton("expand_btn", "Expand rows"),
actionButton("collapse_btn", "Collapse rows"),
actionButton("page_btn", "Change page"),
selectInput("filter_type", "Filter type", unique(data$Type), multiple = TRUE),
reactableOutput("table")
)
server <- function(input, output) {
output$table <- renderReactable({
reactable(
data,
filterable = TRUE,
searchable = TRUE,
selection = "multiple",
details = function(index) paste("Details for row:", index)
)
})
observeEvent(input$select_btn, {
# Select rows
updateReactable("table", selected = c(1, 3, 5))
})
observeEvent(input$clear_btn, {
# Clear row selection
updateReactable("table", selected = NA)
})
observeEvent(input$expand_btn, {
# Expand all rows
updateReactable("table", expanded = TRUE)
})
observeEvent(input$collapse_btn, {
# Collapse all rows
updateReactable("table", expanded = FALSE)
})
observeEvent(input$page_btn, {
# Change current page
updateReactable("table", page = 3)
})
observe({
# Filter data
filtered <- if (length(input$filter_type) > 0) {
data[data$Type %in% input$filter_type, ]
} else {
data
}
updateReactable("table", data = filtered)
})
}
shinyApp(ui, server)
}