如何使用自定义分组设置可反应单元格背景的样式 select

How to style reactable cell background with custom grouping select

我有一些数据要使用 reactable 呈现。我正在根据值设置单元格背景的样式。数据中有许多有用的组,但这些组本身没有有用的聚合值。

我面临的问题是,当使用自定义分组 select 对数据进行分组时,table 将保留前几行数据的样式,因此背景是彩色的.我希望分组行为空白。

在下面的示例中,当按 group 分组时,您会注意到 AC 的背景是彩色的,继承了数据中第 1 行和第 3 行的样式.我可以想象一种组织数据的怪异方式,因此只有非程式化的行排在第一位,但这并不合适,因为数据在初始呈现时会过于混乱。

有没有办法在分组时去除样式,但为具有值的行保留样式?

library(reactable)
library(htmltools)

set.seed(1)

data <- data.frame(
  group = rep(c("A", "B", "C"), each = 5),
  value = rnorm(15)
)

htmltools::browsable(
  tagList(
    div(tags$label("Group by", `for` = "tab")),
    tags$select(
      id = "tab",
      onchange = "Reactable.setGroupBy('tab', this.value ? [this.value] : [])",
      tags$option("None", value = ""),
      tags$option("Group", value = "group"),
    ),

    reactable(
      data,
      columns = list(
        value = colDef(style = function(value){
          if (value < 0) list(background = "#ffa500")
        })
      ),
      defaultPageSize = 15,
      elementId = "tab"
    )
  )
)

我找到了使用 JavaScript 的方法。我在下面的示例中将变量 value 更改为 num,以便更清楚如何应用该函数。

分组是通过 JavaScript 在浏览器中完成的,因此据我所知,没有办法在 R 中控制组样式。

library(reactable)
library(htmltools)

set.seed(1)

data <- data.frame(
  group = rep(c("A","B","C"), each = 5),
  num = rnorm(15)
)

htmltools::browsable(
  tagList(
    div(tags$label("Group by", `for` = "tab")),
    tags$select(
      id = "tab",
      onchange = "Reactable.setGroupBy('tab', this.value ? [this.value] : [])",
      tags$option("None", value = ""),
      tags$option("Group", value = "group"),
    ),

    reactable(
      data,
      columns = list(
        num = colDef(style = JS("function(rowInfo) {
        var value = rowInfo.row['num']
        if (value < 0) {
          var background = '#ffa500'
        } 
        return {background: background}
      }"))
      ),
      defaultPageSize = 15,
      elementId = "tab"
    )
  )
)