【问题标题】:shiny app using default value from query string?闪亮的应用程序使用查询字符串中的默认值?
【发布时间】:2021-01-30 21:21:27
【问题描述】:

考虑以下我想要的闪亮应用:

  1. 有一个带有默认值的输入字段seed
  2. 查看seed 变量的查询字符串
  3. 如果该值不存在,则使用默认值进行渲染。
  4. 如果该值存在,则不要使用默认值呈现输出;而是使用查询字符串值

换句话说,我想等待初始渲染,直到我检查以确保查询字符串没有为该字段指定任何新的默认值。

---
output: html_document
runtime: shiny
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)

values = reactiveValues(checked_query = FALSE)
```
```

```{r}
textInput("seed", label = "Seed:", width = "150px", value = "s33d")
```

```{r}
observeEvent(input$seed, {
    query = getQueryString()
    seed = query[['seed']]
    
    if (!is.null(seed)) {
      updateTextInput(session, 'seed', value = seed)
    }else{
      values$checked_query = TRUE
    }
    
}, once = TRUE)
```

```{r}

renderUI({
  
  # if(!values$checked_query) return(HTML("Please wait..."))
  
  htmltools::tags$h3(input$seed, style="color: red;")
})
```

如果我使用包含 ?seed=38543 的 URL 按原样运行代码,它将非常简短地显示呈现 s33d 的页面,然后切换到 38543。如果查询字符串变量seed 存在,我想阻止它初始呈现s33d

如您所见,我已使用名为checked_query 的反应值进行了初步尝试。如果您取消注释renderUI() 函数中的第一行,如果查询字符串值存在,它将成功阻止初始呈现,如果不存在,则成功呈现初始值,但我不知道如何让它更新到查询字符串值。

如果我放

values$checked_query = TRUE

就在updateTextInput 之后,renderUI 的更新发生得太快了,我仍然看到s33d

知道如何使用查询字符串值作为默认值,但前提是它存在?

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    我认为最简单的解决方法是在运行时也绘制输入框。与其直接输入文本,不如使用

    uiOutput("seedbox")
    

    然后添加

    output$seedbox <- renderUI({
      query = getQueryString()
      seed = if ('seed' %in% names(query)) query[['seed']] else "s33d"
      textInput("seed", label = "Seed:", width = "150px", value = seed)
    })
    

    这样,框将在第一次绘制时使用正确的值,无需更改。所以你不需要observeEvent(input$seed, {...}) 块或checked_query

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 2016-02-09
      • 1970-01-01
      • 2017-03-10
      相关资源
      最近更新 更多