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

问题描述 投票:1回答:1

我正在编写一个Shiny应用程序,它将部署在各种用户之间,屏幕分辨率从720p到1080p不等。该应用程序将部署在Web上。

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

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

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

有没有办法禁用未显示的输出?我正在研究使用全局变量,因为屏幕宽度在会话期间永远不会改变,但我在使用shinyjs和评估"screen.width"表达式时出现问题 - 它似乎返回NULL,但在conditionalPanel内部

谢谢

r shiny shinyjs
1个回答
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
)

如果不满足逻辑条件,则评估停止,另一个命令不运行。

© www.soinside.com 2019 - 2024. All rights reserved.