【发布时间】:2015-10-29 07:45:22
【问题描述】:
在处理 Shiny 应用程序时,我偶然发现了以下问题,这似乎与更新***输入更改输入与反应性顺序的顺序有关。
我已经能够将重现问题的代码和步骤缩小到以下几个:
- 我有一个介于 1 和 5 之间的 numericInput,默认值为 3,其选定的值用于产生一些输出(为简单起见,如果值为 2,则此处只是一条“好”消息, 3 或 4,如果值为 1 或 5,则显示“Bad”消息);
- 我希望用户能够更改输入值并在应用程序的其余部分使用其选择的值(通过按下提交按钮)或使用默认值(通过按下重置按钮);
- 条件 1
sn-ps的代码如下
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")
)
)
)
))
服务器.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"
})
})
我遇到的问题如下
- 如果我选择 5,应用会正确打印“错误”消息
- 如果我现在按“使用默认值”,numericInput 会正确更新为默认值 3,但消息仍然是“错误”,因为闪亮的输入的修改(尚未)确认
- 如果我现在再次按下“使用默认值”按钮,或者如果我按下“使用新值”按钮,则消息现在正确更新为“良好”
另一方面,我希望闪亮确认更新的输入,因为 输入字段已更改
这是设计使然吗?有什么解决问题的建议吗? 我可以通过要求用户单独将值重置为默认值然后提交新值来解决此问题,但这听起来有点不令人满意...
附言我的实际代码有十几个 numericInput 字段,因此确实需要“使用默认值”按钮,因为在此处发布的简化设置之外,手动恢复所有值并不是真正可行的选项;-)
【问题讨论】: