仅在满足conditionalPanel条件时才渲染输出

时间:2018-09-15 09:49:10

标签: r shiny shinyjs

我正在编写一个Shiny应用程序,它将以720p至1080p的屏幕分辨率在各种用户中部署。该应用程序将部署在Web上。

我的页面有一个简单的侧边栏和一个主要内容区域。为了调整侧边栏的宽度(以包含所有内容而没有任何滚动),我在UI.r中使用了两个conditionalPanels,它们通过评估"screen.width > 1600"或渲染适当的1080p或720p UI。 "screen.width < 1600"

这很好,并且可以根据需要呈现适当的UI。

但是,在对应用程序进行性能分析后,我意识到虽然确实显示了适当的UI面板,但是即使在任何给定时间仅显示一个,我的服务器代码也呈现了高分辨率和低分辨率输出。

有什么办法可以禁用未显示的输出?我一直在研究使用全局变量,因为屏幕宽度在会话期间永远不会改变,但是我在使用Shinyjs和评估"screen.width"表达式时遇到了麻烦-它似乎会在任何地方返回NULL conditionalPanel

谢谢

1 个答案:

答案 0 :(得分:0)

没有最小的可复制示例,很难提供解决方案。但是reqvalidateneed可能就是您想要的。

req用于在执行之前检查是否存在值:req documentation

validateneed可以以非常相似的方式一起使用:validate documentation

例如,您可以尝试:

output$my_1080_plot = renderPlot(
    validate(need(screen.width > 1600, message = FALSE))
    # other commands to make plot
)

如果不满足逻辑条件,则评估将停止并且其他命令将不会运行。

相关问题