Interactive data tables for R
Documentation - reactable 0.4.4
Documentation - reactable 0.4.3
r-devel-linux-x86_64-fedora-clang
platform. (#308)Documentation - reactable 0.4.2
htmlwidgets
1.6.0 or later is installed. In general, fixed rendering of any Shiny HTML tags with duplicate attributes. (@tomsing1, #306)Documentation - reactable 0.4.1
Documentation - reactable 0.4.0
reactable(static = TRUE)
to render a table to static HTML, or options(reactable.status = TRUE)
to enable static rendering globally. With static rendering, tables are pre-rendered to their initial HTML so they appear immediately without any flash of content. Tables are then made interactive and subsequently rendered by JavaScript as needed. Static rendering requires the V8 package, which is not installed with reactable by default. Learn more in the Static Rendering article.reactable()
gains a meta
argument to pass arbitrary data from R to JavaScript render functions and style functions. Custom metadata can be accessed using the state.meta
property, and updated using updateReactable()
in Shiny or Reactable.setMeta()
in the JavaScript API. See examples of using custom metadata for custom rendering or custom metadata for conditional styling. (#255)Reactable.onStateChange()
method in the JavaScript API that sets up a function to be called whenever the table state changes. (#265)Reactable.setData()
method in the JavaScript API for updating the table data. (#278)Reactable.downloadDataCSV()
in the JavaScript API now supports an additional options
argument to change the field or decimal separator, include specific columns, and exclude column headers. (#239, #293)Reactable.getDataCSV()
method in the JavaScript API to get the table data as a CSV string.Reactable.toggleHideColumn()
and Reactable.setHiddenColumns()
methods in the JavaScript API to toggle or set hidden columns. JavaScript render functions and style functions also receive a new state.hiddenColumns
property for the hidden columns in the table. (#246)getReactableState()
now includes the current sorted columns. (#265)rem
/em
instead of px
). The documentation site uses the default root font size of 16px
, so examples may look different on pages that change the root font size. For example, Bootstrap 3 sets a default root font size of 10px
, so you may need to adjust the rem
values before adapting examples to your site. (Bootstrap 4 and above no longer change the default root font size).cellInfo.index
or rowInfo.index
property for aggregated cells and rows. (#250)NULL
values in list-columns now correctly appear as missing values instead of [object Object]
. NULL
values are now represented as null
values in JavaScript instead of an empty object like {}.reactableTheme()
styles no longer override custom user CSS in the HTML document <head>
.getReactableState()
now accepts multiple values in its name
argument to return a subset of state values.reactable()
now respects htmlwidget::sizingPolicy()
's viewer.fill
and browser.fill
and fills the RStudio Viewer pane by default. (@cpsievert, #280)reactable()
on a dplyr grouped data frame ( dplyr::group_by()
or grouped_df
) with rownames = TRUE
no longer adds a stringsAsFactors
column to the table. (@daattali, #283)Numeric NA
values are now represented as null
in JavaScript instead of an "NA"
string. Numeric NaN
, Inf
, and -Inf
values are now represented as NaN
, Infinity
, and -Infinity
in JavaScript instead of "NaN"
, "Inf"
, and "-Inf"
strings. (@daattali, #261)
function(cellInfo) {
// Old
cellInfo.value // "NA", "NaN", "Inf", "-Inf"
// New
cellInfo.value // null, NaN, Infinity, -Infinity
}
Support for Internet Explorer 11 (IE 11) is deprecated. Existing features will continue to work in IE 11, but new features may not support IE 11, and IE 11 is no longer tested.
The documentation website no longer supports IE 11.
Documentation - reactable 0.3.0
This release upgrades to a new major version of React Table (#35), which brings many new features, improvements, and bug fixes. reactable has been largely rewritten to take advantage of React Table's new approach as a flexible table utility rather than a table component.
This means it'll be easier to add new custom features, customize styling and markup, and maintain reactable in the future. Most of the features and fixes in this release would not have been possible or easy to do without this upgrade.
Backward compatibility was kept where possible, but note that there are several breaking changes, particularly around the JavaScript API.
vAlign
and headerVAlign
arguments in colDef()
, and the new headerVAlign
argument in colGroup()
(#142, #177).sticky
argument in colDef()
and colGroup()
(#19, #72, #141).reactable()
gains a searchMethod
argument to use a custom JavaScript function for global table searching (#222).colDef()
gains a filterMethod
argument to use a custom JavaScript function for column filtering (#9, #90, #145).colDef()
gains a filterInput
argument to render a custom filter input for column filtering (#9).reactable()
gains a paginateSubRows
argument to include grouped sub rows in pagination. This is recommended for grouped tables with a large number of rows where expanded rows may not all fit on one page.colDef()
gains a grouped
argument to customize rendering for grouped cells in groupBy
columns (#33, #94, #148).rowInfo.expanded
and cellInfo.expanded
indicating whether the row is expandedcellInfo.selected
indicating whether the cell's row is selectedstate.page
, state.pageSize
, and state.pages
for the current page index, page size, and number of pages in the tablecellInfo.filterValue
and column.filterValue
for the column filter value, and column.setFilter
to set the filter valuestate.filters
for the column filter valuesstate.searchValue
for the table search valuestate.selected
for the selected row indicesstate
argument to access the table state (#88). Custom cell click actions also now receive a state
argument.colDef()
gains a searchable
argument to enable or disable global table searching. Columns can be excluded from searching using colDef(searchable = FALSE)
, and hidden columns can be included in searching using colDef(searchable = TRUE)
(#217).Several properties and arguments have been renamed or moved for consistency with the rest of the API. These properties were not removed unless they were very rarely used, so most code should continue to work upon upgrading.
The rowInfo.row
property is now deprecated, and has been renamed to rowInfo.values
. rowInfo.row
remains supported, but replace usages with rowInfo.values
when possible.
// Old
function(rowInfo) {
rowInfo.row
}
// New
function(rowInfo) {
rowInfo.values
}
The colInfo.column
and colInfo.data
properties in header and cell render functions are now deprecated. The colInfo
object now contains all of the same properties as colInfo.column
, and is now referred to as column
in the documentation. When possible, replace usages of colInfo
with column
, colInfo.column
with column
, and colInfo.data
with state.data
or state.sortedData
.
// Old
function(colInfo) {
colInfo.column.id
colInfo.data
}
// New
function(column, state) {
column.id
state.data
}
The state.expanded
property has been removed. To check whether a row is expanded, use rowInfo.expanded
instead.
// Old
function(rowInfo, column, state) {
if (state.expanded[rowInfo.index]) { // row is expanded ... }
}
// New
function(rowInfo, column, state) {
if (rowInfo.expanded) { // row is expanded ... }
}
The rowInfo.page
and cellInfo.page
properties have been removed. To get the current page index of the table, use state.page
instead.
// Old
function(rowInfo, column, state) {
rowInfo.page
}
// New
function(rowInfo, column, state) {
state.page
}
When accessing row data in JavaScript render functions and style functions:
Date and time values are now represented in UTC time (ISO 8601 format), rather than local time without a timezone.
function(cellInfo) {
// Old
cellInfo.value // 2022-05-22T19:30:00
// New
cellInfo.value // 2022-05-22T19:30:00Z
// With a UTC time, it's much easier to format dates in the user's local time
return new Date(cellInfo.value).toLocaleString()
}
Single values (length-1 vectors) in list-columns are no longer represented as arrays (i.e., data is now serialized using jsonlite::toJSON(auto_unbox = TRUE)
). For example, list(x = 1)
in R is now represented as {x: 1}
in JavaScript instead of {x: [1]}
.
columnGroups
and groupBy
arguments are provided in reactable()
, groupBy
columns are no longer added to a column group automatically (#87).defaultGroupHeader
argument in reactableLang()
is now deprecated and no longer used. Use the columnGroups
argument in reactable()
to customize the column group header for groupBy
columns.detailsCollapseLabel
, deselectAllRowsLabel
, deselectAllSubRowsLabel
, and deselectRowLabel
arguments in reactableLang()
are now deprecated and no longer used (#167).groupBy
and row details columns (#71).show = FALSE
as a default value in defaultColDef()
now works (@csgillespie, #105). Setting sortNALast
, html
, and na
to their default values in defaultColDef()
also now works.pageSizeOptions
in reactable()
now works.reactable()
, defaultExpanded = TRUE
now expands all rows in the table, not just rows on the first page.reactable()
, defaultExpanded = TRUE
now works when column groups are present.groupBy
columns, aggregate functions could take aggregated values which could produce inaccurate calculations (e.g., when calculating the mean of values)."max"
and "min"
aggregate functions now work on dates, date-times, and strings (#130).reactable()
now works for data frames with difftime
objects and objects with custom classes (#164).colFormat()
now formats dates and times in the user's time zone, rather than ignoring time zones.aria-expanded
attribute to indicate expanded or collapsed state, and use "Toggle details" as their default label (#167).reactableLang()
gains the groupExpandLabel
argument to customize the accessible label for row group expand buttons (#167).rowHeader
argument in colDef()
. Cells in the row names column are automatically marked up as row headers (#167).reactableTheme()
, filterInputStyle
now applies correctly when rerendering a table in Shiny (#186).reactableTheme()
, cellPadding
now applies to column group headers correctly.[
or ]
) in their column name now render correctly (#187).reactable(pagination = FALSE)
now works correctly on table data updates (#214).onclick
(#150).updateReactable()
gains a data
argument to update the data of a reactable
instance in Shiny (#49).defaultSelected
now works correctly with Crosstalk linked selection.SharedData
objects with zero or one rows.colFormat()
now always formats numbers as a localized string when locales
is specified.reactableTheme(tableBodyStyle = list(flex = "auto"))
.reactable()
now supports linked selection and filtering with Crosstalk-compatible
HTML widgets (#46).reactable()
gains a theme
argument to customize the default styling of a table.reactable()
gains a language
argument to customize the language strings in a table
(#24).reactable()
gains a defaultSelected
argument to set default selected rows.reactable()
gains a defaultExpanded
argument to set default expanded rows
(#23).updateReactable()
function to update the selected rows, expanded rows, or
current page of a reactable instance in Shiny (#20).getReactableState()
function to get the state of a reactable instance in Shiny
(#20).colDef()
gains a "median"
aggregate function to calculate the median of numbers
(#30).".selection"
as the column name
(#19).reactable()
, the rowClass
, rowStyle
, and details
JavaScript functions
now receive a rowInfo.selected
property indicating whether the row is selected
(#20).selectionId
argument in reactable()
will be deprecated in a future release.
Use getReactableState()
to get the selected rows of a table in Shiny instead.colFormat(date = TRUE)
now formats YYYY-MM-DD
dates correctly (#38).colFormat(percent = TRUE)
now works correctly when viewing tables in IE11.colDef()
, the class
and style
R functions now handle list-columns correctly.