다음과 같은 반짝이는 앱을 고려하십시오.
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;")
})
```
예를 들어를 포함하는 URL을 사용하여 코드를 그대로 실행하면 렌더링 된 ?seed=38543
페이지가 매우 짧게 표시되고 s33d
로 전환됩니다 38543
. s33d
쿼리 문자열 변수 seed
가 존재하는 경우 초기 렌더링에서 방지하고 싶습니다 .
보시다시피,라는 반응 값을 사용하여 초기 시도를했습니다 checked_query
. renderUI()
함수 의 첫 번째 줄의 주석 처리를 제거하면 쿼리 문자열 값이 있으면 초기 렌더링을 성공적으로 차단하고 그렇지 않으면 초기 값을 성공적으로 렌더링하지만 쿼리로 업데이트하는 방법을 모르겠습니다. 문자열 값.
내가 넣으면
values$checked_query = TRUE
직후에 updateTextInput
에 대한 업데이트 renderUI
가 너무 빨리 일어나고 여전히 s33d
.
쿼리 문자열 값을 기본값으로 사용하는 방법에 대한 아이디어가 있지만 존재하는 경우에만 가능합니까?
가장 쉬운 방법은 런타임에 입력 상자를 그리는 것입니다. 텍스트를 직접 입력하는 대신
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
값이 필요하지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다