如何使用单个 actionButton 生成 tableOutput 并切换它而不每次都重新加载它?

Posted

技术标签:

【中文标题】如何使用单个 actionButton 生成 tableOutput 并切换它而不每次都重新加载它?【英文标题】:How to use a single actionButton to generate a tableOutput and toggling it without reloading it each time? 【发布时间】:2019-10-31 22:13:07 【问题描述】:

我正在开发一个闪亮的应用程序。我需要用户输入一个文件,然后从那个文件中得到一个表。

我需要一个按钮来执行此操作:

如果输入为空,则什么都没有

如果输入不为null,则生成表格并显示

如果表格已经显示,将其隐藏。

我尝试将表格输出设置为hidden,并在单击按钮时切换它。它可以工作,但是当我再次按下按钮隐藏表格时,表格会重新加载。

我的 UI 中有这个:

actionButton(inputId = "viewFile", label = "View file"),
hidden(tableOutput("fileTable"))

这是我在服务器上尝试过的:

  observeEvent(input$viewFile,
      output$fileTable <- renderTable(...)) #generating the table
      toggle("fileTable")
  )

正如您所理解的,当单击viewFile 按钮时,会呈现fileTable 输出,然后进行切换(它不再隐藏,所以显示出来了)。第一次生成输出,非常完美。

但是,如果我再次单击按钮以隐藏表格,则会再次计算 renderTable。这是一个无用的操作(您不想生成表格输出只是为了隐藏它)。

有什么方法可以让切换保持工作,但阻止 tableOutput 的重新生成?我考虑过在输出上使用if,但您无法评估来自服务器的输出项。

(Warning: Error in $.shinyoutput: Reading objects from shinyoutput object not allowed.)


最后一个细节:稍后,如果文件已更改,我将尝试通过重新生成表格输出来改进我的应用程序,是否也有办法做到这一点?

感谢您对初学者的问题表示抱歉。我有点失落。如果您对我的代码有任何疑问,请不要犹豫。

【问题讨论】:

对不起,我误解了你的问题。如果您只想将viewFile 用于切换状态,那么为什么不将renderTable 移到observeEvent 之外呢? 这正是我所做的!刚回答你,我就有了这个想法。解决了:-) 【参考方案1】:

我找到了一个简单的方法来做我想做的事。

我只是在加载数据的那一刻生成表格,然后用我的按钮,我只切换它。

用户界面:

file <- fileInput(inputId = "file", label="myfile")
hidden(actionButton(inputId = "viewFile", label = "View file"))
hidden(tableOutput("fileTable"))

服务器:

observeEvent(input$file, 
    #The output is generated but not displayed
    output$fileTable<- renderTable(read.csv(file[4][[1]]))
    #We display the button
    toggle("viewFile")
)


observeEvent(input$viewFile,
    toggle("fileTable")
)

会发生这样的事情:

用户加载文件

从文件生成表格但不显示

出现“查看文件”按钮

用户点击按钮

表格显示

用户再次点击按钮

表格被隐藏

无限重复。 祝你有美好的一天

【讨论】:

以上是关于如何使用单个 actionButton 生成 tableOutput 并切换它而不每次都重新加载它?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Kivy 中隐藏 ActionButton?

如何在单击时删除Shiny actionButton

如何使用 actionButton 更改 R Shiny 中 selectInput 上的选定值?

在 R Shiny 中,如何使用 actionButton 重置 rhandsontable 中的数据(反转所有手动输入)?

自定义 TabControl 以关闭单个选项卡

shiny:在空/未选中 radioButtions()的情况下,actionButton()是否可以返回错误?