निम्नलिखित चमकदार ऐप पर विचार करें, जो मैं करना चाहता हूं:
- एक इनपुट फ़ील्ड है
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
है, तो यह बहुत संक्षेप में s33d
के साथ पेज दिखाएगा और फिर 38543
पर स्विच कर देगा। यदि क्वेरी स्ट्रिंग चर seed
मौजूद है, तो मैं इसे s33d
के प्रारंभिक प्रतिपादन से रोकना चाहता हूं।
जैसा कि आप देख सकते हैं, मैंने इस पर checked_query
नामक एक प्रतिक्रियाशील मान के साथ एक प्रारंभिक प्रयास किया है। यदि आप renderUI()
फ़ंक्शन में पहली पंक्ति को असम्बद्ध करते हैं, तो यह प्रारंभिक रेंडरिंग को सफलतापूर्वक अवरुद्ध कर देगा यदि क्वेरी स्ट्रिंग मान मौजूद है, और यदि ऐसा नहीं है तो सफलतापूर्वक प्रारंभिक मान प्रस्तुत करता है, लेकिन मुझे यकीन नहीं है कि कैसे बनाना है यह क्वेरी स्ट्रिंग मान में अद्यतन करता है।
अगर मैं डालता हूँ
values$checked_query = TRUE
updateTextInput
के ठीक बाद, renderUI
का अपडेट बहुत तेजी से होता है और मुझे अभी भी s33d
दिखाई देता है।
कोई भी विचार क्वेरी स्ट्रिंग मान को डिफ़ॉल्ट मान के रूप में कैसे उपयोग करें, लेकिन केवल तभी मौजूद है?
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
मान की आवश्यकता नहीं होगी