使用crosstalk筛选前默认显示空reactable表格的实现方法(无需Shiny)
完全可以实现,无需依赖Shiny,推荐两种轻量方案:
方案1:利用筛选器默认不匹配值实现(最简单)
给filter_select指定一个不存在于owner字段值中的默认选中项,初始状态下没有匹配数据,表格自然为空,用户手动选择后才会加载对应数据。
仅需修改筛选器部分的代码即可:
library(crosstalk) # 注意group参数是实现多表格联动筛选的核心! shared_df1 <- SharedData$new(df1, ~owner, group = "Choose owner") shared_df2 <- SharedData$new(df2, ~owner, group = "Choose owner") # 新增selected参数设为不存在的字段值,multiple可根据需要保留多选或设为FALSE filter_select("owner", "Car owner:", shared_df1, ~owner, selected = "无匹配", multiple = TRUE)
说明:因为你的owner字段只有John、Mark两个取值,默认选中不存在的"无匹配"时,两个关联的SharedData都没有匹配行,表格默认空白,用户选中任意车主后就会正常展示对应数据。
方案2:JS动态清空初始选择(适配多选场景)
如果不想添加无意义的默认选中值,可以嵌入一段极小的JS脚本,页面加载完成后自动清空筛选器的默认选中状态,效果完全一致:
修改筛选器部分代码如下:
library(crosstalk) library(htmltools) shared_df1 <- SharedData$new(df1, ~owner, group = "Choose owner") shared_df2 <- SharedData$new(df2, ~owner, group = "Choose owner") tagList( filter_select("owner", "Car owner:", shared_df1, ~owner), # 嵌入JS脚本清空初始选择 tags$script(HTML(" $(document).ready(function() { setTimeout(function() { $('#owner')[0].selectize.clear(); }, 100); }); ")) )
说明:这段脚本会在页面渲染完成后自动清空筛选器的默认全选状态,初始无选中项时表格就会为空,用户后续操作不受任何影响。
内容的提问来源于stack exchange,提问作者mharinga
相关产品推荐
相关产品推荐

