[英]R shiny - possible issue with update***Input and reactivity
在使用Shiny应用程序时,我偶然发现了以下问题,该问题似乎与更新更改输入的顺序有关。
我已经能够缩小代码和步骤来将问题重现为以下内容:
代码段如下
ui.R:
shinyUI(fluidPage(
titlePanel(
fluidRow(headerPanel(HTML("Test a possible bug"), windowTitle = "Test a possible bug")
)
),
mainPanel(
tabsetPanel(
tabPanel("Try this", br(),
numericInput(inputId="foo", label="Input me", value=3,min=1, max=5),
actionButton(inputId="reset", label="Use default"),
actionButton(inputId="submit", label="Use new value"),br(),br(),br(),
textOutput(outputId="bar")
)
)
)
))
server.R:
shinyServer(function(input, output, session) {
observeEvent(input$reset, {
updateNumericInput(session=session, inputId="foo", value=3)
})
checkInput <- reactive({
input$submit
input$reset
isolate({
input$foo > 1 && input$foo < 5
})
})
output$bar <- renderText({
if (checkInput())
"Good"
else
"Bad"
})
})
我遇到的问题如下
另一方面,由于输入字段已更改 ,因此我希望Shiny确认更新的输入
这是设计使然吗? 有解决问题的建议吗? 我可以通过要求用户将值分别重置为默认值然后提交新值来解决此问题,但这听起来有些不令人满意...
ps我的实际代码中有12个numericInput字段,因此确实需要“使用默认值”按钮,因为在此处发布的简化设置之外,手动还原所有值并不是一个切实可行的选择;-)
我相信这就是它的预期工作方式。 如果您查看updateNumericInput或updateSelectInput的文档,则在生成所有输出之后进行更新。
“输入更新程序功能向客户端发送一条消息,告诉它更改输入对象的设置。所有观察者(包括输出)运行完毕后,将收集并发送消息。”
我建议以如下方式设置功能:仅在单击“提交”时显示消息“好”或“不良”,而在单击“重置”时将其清除。 希望这是有用的
请看一个例子
library(shiny)
ui<-(fluidPage(
titlePanel(
fluidRow(headerPanel(HTML("Test a possible bug"), windowTitle = "Test a possible bug")
)
),
mainPanel(
tabsetPanel(
tabPanel("Try this", br(),
numericInput(inputId="foo", label="Input me", value=3,min=1, max=5),
actionButton(inputId="reset", label="Use default"),
actionButton(inputId="submit", label="Use new value"),br(),br(),br(),
textOutput(outputId="bar")
)
)
)
))
server<-(function(input, output, session) {
rv <- reactiveValues()
observeEvent(input$reset, {
updateNumericInput(session=session, inputId="foo", value=3)
rv$Message = " "
})
observeEvent(input$submit,{
rv$checkInput<- input$foo > 1 && input$foo < 5
if (rv$checkInput)
rv$Message<- "Good"
else
rv$Message<- "Bad"
})
output$bar <- renderText({
rv$Message
})
})
shinyApp(ui,server)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.