[英]updateSliderInput only updates graphically, but not the actual value
在 Shiny 應用程序中,我想使用updateSliderInput()
將 slider 重置為其初始值。 現在看來,這種情況發生了——暫時只有圖形而不是實際值( input$var1
):在將 slider 設置為其初始 position 並按下“重置”后,Z10BF08F08F0BBD66894775554到它的初始 position 正如預期的那樣,而input$var1
的打印值仍然顯示調整后的值。 第二次按“重置”,然后重置input$var1
。
代碼中有一些message()
用於突出顯示終端中的事件序列(代碼大部分是從這里借來的)。
library(shiny)
ui <- fluidPage(
titlePanel("Reset Slider Value"),
fluidRow(column(4,
sliderInput("var1", "", min = -100, max = 100, value = 0),
actionButton('submit', 'Submit'),
actionButton("reset", "Reset")),
column(6,
verbatimTextOutput("text1"),
verbatimTextOutput("text2")))
)
server <- function(input, output, session) {
rv_text1 <- reactiveVal()
rv_text2 <- reactiveVal()
observeEvent(input$reset, {
message("Going to update")
updateSliderInput(session, 'var1', value = 0)
message("Is updated")
rv_text2(paste("on reset var1 =", input$var1))
message(paste("reset: var1 =", input$var1))
})
observeEvent(input$submit, {
rv_text1(paste("on submit var1 =", input$var1))
print(paste0("submit: var1 =", input$var1))
})
output$text1 <- renderText({rv_text1()})
output$text2 <- renderText({rv_text2()})
}
shinyApp(ui, server)
現在,我很困惑。 我本來預計input$var1
的內容會隨着它的圖形表示而改變,特別是如果進一步依賴並處理 slider 的內容(就像我們的情況一樣)。 因此,如果有人能告訴我這是否是預期的行為(如果是,為什么)以及我在這里遺漏了什么或者這實際上是一個錯誤,那就太好了? 提前謝謝了: :)
我認為您的代碼剛剛完成運行觀察事件,然后它正在更改 var1 的值。 檢查 updateSliderInputdescription:“輸入更新程序函數向客戶端發送消息,告訴它更改輸入 object 的設置。在所有觀察者(包括輸出)完成運行后收集並發送消息。”。
如果您在另一個 observeEvent 中查看 input$var1,您可以看到它發生了變化:
library(shiny)
ui <- fluidPage(
titlePanel("Reset Slider Value"),
fluidRow(column(4,
sliderInput("var1", "", min = -100, max = 100, value = 0),
actionButton('submit', 'Submit'),
actionButton("reset", "Reset")),
column(6,
verbatimTextOutput("text1"),
verbatimTextOutput("text2")))
)
server <- function(input, output, session) {
rv_text1 <- reactiveVal()
rv_text2 <- reactiveVal()
observeEvent(input$reset, {
message("Going to update")
updateSliderInput(session, 'var1', value = 0)
message("Is updated")
rv_text2(paste("on reset var1 =", input$var1))
message(paste("reset: var1 =", input$var1))
})
## Added ##
observeEvent(input$var1, {
print(paste0("Here is the value of input$var1",input$var1))
rv_text2(paste("on reset var1 =", input$var1)) # Well updated now
})
observeEvent(input$submit, {
rv_text1(paste("on submit var1 =", input$var1))
print(paste0("submit: var1 =", input$var1))
})
output$text1 <- renderText({rv_text1()})
output$text2 <- renderText({rv_text2()})
}
shinyApp(ui, server)
重置后獲得input$var1
正確值的一種解決方法是使用另一個反應性占位符變量,而不是用目標值填充:
library(shiny)
ui <- fluidPage(
titlePanel("Reset Slider Value"),
fluidRow(column(4,
sliderInput("var1", "", min = -100, max = 100, value = 0),
actionButton("submit", "Submit"),
actionButton("reset", "Reset")),
column(6,
verbatimTextOutput("text1"),
verbatimTextOutput("text2"),
verbatimTextOutput("text3")))
)
server <- function(input, output, session) {
rv_text1 <- reactiveVal()
rv_text2 <- reactiveVal()
rv_text3 <- reactiveVal()
slider_value <- reactiveVal(0)
value_to_reset_to <- 0
observeEvent(input$submit, {
rv_text1(paste("on submit var1 =", input$var1))
})
observeEvent(input$reset, {
updateSliderInput(session, 'var1', value = value_to_reset_to)
rv_text2(paste("on reset var1 =", input$var1))
slider_value(value_to_reset_to)
})
observeEvent(input$var1, {
slider_value(input$var1)
rv_text3(paste("in placeholder =", slider_value()))
})
output$text1 <- renderText({rv_text1()})
output$text2 <- renderText({rv_text2()})
output$text3 <- renderText({rv_text3()})
}
shinyApp(ui, server)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.