Roh*_*uja 10 r shiny shiny-reactivity
我试图理解存储的值shiny inputwidgets.我写下面的代码输出a sliderInput并基于sliderInput的值,生成另一个o/p元素即
如果sliderInput值> 30,那么它会生成groupsradiobutton,否则会生成afile upload button
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
sliderInput(inputId = "num",
label = "Choose a number",
value = 25, min = 1, max = 100),
uiOutput("uploadorSelect"),
textOutput("RadioButtonValue")
)
server <- function(input, output) {
output$uploadorSelect <- renderUI({
x<-input$num
if( x > 30 ){
# render grouped radio buttons
radioGroupButtons(inputId = "opbAppendRemoveMonthlyOption",choices =c("Append","Continue"), status = "success",
direction = "horizontal",justified = F,checkIcon = list(yes=icon("ok",lib="glyphicon")),selected = character(0))
}else{
# render upload button
fileInput(inputId="btnUploadMonthlyFile",label = "Upload Monthly Data file")
}
})
output$RadioButtonValue<-renderText({
x<-(input$opbAppendRemoveMonthlyOption)
return(x)
})
}
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
情况:-
第1步 - 我将sliderInput的值更改为31,生成groupsradiobutton然后我Append从radiobutton中选择
第2步 - 我再次将sliderInput的值更改为32,重新生成了groupsradiobutton,我认为应该将block 中input$opbAppendRemoveMonthlyOption使用的值重置output$RadioButtonValue为Null,但是它仍然保留在Step1中选择的值
我认为这是因为当我input$opbAppendRemoveMonthlyOption在output$RadioButtonValue其中引用 时返回缓存值?如果是这样的话,每次更改sliderInput的值时,如何将值设置为默认值?
您的应用已正确设置,但问题似乎opbAppendRemoveMonthlyOption是" 新选择" 的新值丢失的消息.例如,如果将默认selected选项更改为"继续",则每次更改滑块时都会正确重置.
通常,您还可以在反应式表达式中使用相应的更新函数来更改输入的值,如下所示:
observeEvent({input$num}, {
updateRadioGroupButtons(session, "opbAppendRemoveMonthlyOption",
selected = character(0))
})
Run Code Online (Sandbox Code Playgroud)
但是,就像在输入的创建中一样,当尝试将值设置回未选择状态时,将忽略此消息,但如果将其设置为其中一个选项,则会起作用.请注意,Shiny文档(?radioButtons)中不鼓励使用未选择状态,因此可能不完全支持.
如果需要表示"未选择"状态,则可以通过使用selected = character(0)来默认单选按钮没有选择任何选项.但是,建议不要这样做,因为一旦他们做出选择,用户就无法返回该状态.相反,考虑让你的第一个选择是c("None selected"="").
您可以使用一些JavaScript解决此问题,input以便在单击滑块时强制重置值.
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
tags$div(
sliderInput(inputId = "num",
label = "Choose a number",
value = 25, min = 1, max = 100),
onchange = "Shiny.onInputChange('opbAppendRemoveMonthlyOption', '')"
),
uiOutput("uploadorSelect"),
textOutput("RadioButtonValue")
)
server <- function(input, output) {
output$uploadorSelect <- renderUI({
x<-input$num
if( x > 30 ){
# render grouped radio buttons
radioGroupButtons(inputId = "opbAppendRemoveMonthlyOption",choices =c("Append","Continue"), status = "success",
direction = "horizontal",justified = F,checkIcon = list(yes=icon("ok",lib="glyphicon")),selected = character(0))
}else{
# render upload button
fileInput(inputId="btnUploadMonthlyFile",label = "Upload Monthly Data file")
}
})
output$RadioButtonValue<-renderText({
x<-(input$opbAppendRemoveMonthlyOption)
return(x)
})
}
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
更多信息来自RStudio.com的Shiny < - > JavaScript消息