【发布时间】:2021-01-30 21:21:27
【问题描述】:
考虑以下我想要的闪亮应用:
- 有一个带有默认值的输入字段
seed - 查看
seed变量的查询字符串 - 如果该值不存在,则使用默认值进行渲染。
- 如果该值存在,则不要使用默认值呈现输出;而是使用查询字符串值
换句话说,我想等待初始渲染,直到我检查以确保查询字符串没有为该字段指定任何新的默认值。
---
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。
知道如何使用查询字符串值作为默认值,但前提是它存在?
【问题讨论】: