我有一对辅助输入,允许用户从一组选项中选择组合。此外,方便的是能够删除之前创建的项目。
对于此任务,以反应值对象listN <- reactiveValues()
形式的命名列表将负责存储这些信息。
添加项目的功能就像魅力一样,但当我尝试从listN
删除项目时,其项目名称将永久存在!
我的策略是使用reactiveValuesToList()
,操纵其项目并将listN
替换为reactiveValues()
(或do.call(reactiveValues, listN_as_list)
的全新实例。
我在Gist上存储了一个可重现的应用程序。我希望你们能够帮助我。如果需要,请坚持更多说明。
URL:
gist.github.com/d43e72959c4576d27535
在控制台上运行的代码:
shiny::runGist('d43e72959c4576d27535')
提前致谢!
答案 0 :(得分:3)
Joe Cheng在Shiny Google Groups:
的回答是的,你无法替换那样的整个reactiveValues实例 并期望任何与之前的reactiveValues绑定的东西 实例立即了解新的。上的插槽 reactiveValues实例本身是被动的,但它自己的变量是 不
我认为这里真正的问题是,与列表和环境不同,你不能 从reactiveValues中删除值,只将它们设置为NULL。
我能想到两种简单的解决方法:
1)除了
reactiveValues
实例的插槽被反应之外,还要创建变量 反应,使用makeReactiveBinding。2)你也可以使用reactiveValues 像往常一样,但保持一个列表在持有的反应值 组合,没有reactiveValues本身保持值。在 换句话说,
values <- reactiveValues(combos = list())
,以及何时 添加了一些新内容,values$combos[[x]] <- y
。尝试修复 上面的数字1,我发现当选择是长度为0的向量时,updateSelectInput无法正常工作。而不是发送0长度的矢量 客户端,它根本不发送任何选择,所以 选择永远不会改变。
我已经分了你的要点并添加了两个修订:一个实现 解决方法#1(以及我发现的一些其他问题),以及一个 通过使用renderUI解决updateSelectInput问题。 https://gist.github.com/jcheng5/eaedfed5095d37217fca/revisions