【问题标题】:Flexdashboard - hidden navbar tab using reactive valuesFlexdashboard - 使用反应值的隐藏导航栏选项卡
【发布时间】:2019-12-08 08:23:43
【问题描述】:

我可以使用 show_hide 的静态值隐藏导航栏页面,但我无法弄清楚如何使用反应值 r_show_hide() 来隐藏导航栏页面。我也尝试过使用isolate(ifelse...),然后使用r_show_hide(无括号)以及reactiveVal(),但均无济于事。

还有一个无关的"> 出现。任何帮助将不胜感激。

更新: 我创建了一个问题https://github.com/rstudio/flexdashboard/issues/229


    ---
    title: "-"
    output: flexdashboard::flex_dashboard
    runtime: shiny
    ---

    ```{r setup, include=FALSE}
    library(flexdashboard)
    library(shiny)

    show_hide <- "show" # "hidden"

    r_show_hide <- reactive(ifelse(session$clientData$url_hostname == "127.0.0.1", "hidden", "show"))
    ```

    Does work {.`r show_hide`}
    =============================

    ### Should be `r show_hide`


    Doesn't work {.`r reactive(r_show_hide())`}
    ===============================

    ### Should be `r renderText(r_show_hide())`

【问题讨论】:

  • 在“不起作用”之后调用 r_show_hide() 时是否需要将 reactive() 包裹起来?您是否尝试将其放入 paste0 调用中?
  • 需要使用一些反应函数才能访问r_show_hide()。我试过renderText(),但还是不行。
  • reactiveValue 是否可以与您的 ifelse 语句而不是响应式语句一起使用?
  • 我也尝试过,但可能没有正确完成。你能试着模拟一个答案吗?
  • 我还没想出解决办法。

标签: r shiny flexdashboard


【解决方案1】:

好的,这花了我一段时间才弄清楚。

基本问题是 flexdashboard 导航栏的大括号中的 r 个块在非响应式上下文中评估,而构建每个页面内容的 r 个块在响应式上下文中评估。出于这个原因,您不能使用诸如r_show_hide() 之类的响应式来触发导航栏页面的隐藏/显示参数,但您可以在页面内的renderText() 函数中使用r_show_hide()

所以实际的问题是,如何从非反应式上下文中访问反应式值。答案是isolate(),并解释为here

下面我提供了一个使用您的代码的示例。

---
title: "-"
output: flexdashboard::flex_dashboard
runtime: shiny
---

```{r setup, include=FALSE}
library(flexdashboard)
library(shiny)

show_hide <- "show" # "hidden"

r_show_hide <- reactive(ifelse(session$clientData$url_hostname == "127.0.0.1", "hidden", "show"))
```

Does work {.`r show_hide`}
=============================

### Should be `r show_hide`


Doesn't work {.`r isolate(r_show_hide())`}
===============================

### Should be `r renderText(r_show_hide())`

【讨论】:

  • 感谢您深入研究,这非常有帮助!我尝试使用 input 对象,但它似乎不起作用。如果我添加radioButtons("show_hide", "View page", choices = c("show", "hidden")),然后将反应逻辑替换为r_show_hide &lt;- reactive(input$show_hide),它就会返回不工作。关于如何解决的任何想法?
  • 我认为问题在于隔离反应值。一旦隔离,它就不会更新,这就是隔离的全部意义所在。所以上面的例子是有效的,因为在会话开始时创建了响应式,然后它的值被隔离并保持不变。因此,下一个挑战是提供一种解决方法来更新孤立的反应值——如果这可能的话。
  • Doh,我应该意识到这一点。再次感谢你的帮助。我真的很感激。
  • 在编织 flexdashboard 文档时似乎所有输入值都不存在 - 所以我认为在定义文档结构时无法使用用户输入值。显然,在编织时,客户端 url 上的会话信息已经知道,因为上面的方法是有效的。此外,我发现了这个example,他们在其中创建了动态子页面。这可能与 flexdashboard 一样动态。
猜你喜欢
  • 2018-03-27
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 2020-09-10
  • 2016-03-28
  • 2018-03-23
  • 1970-01-01
  • 2021-05-02
相关资源
最近更新 更多