闪烁的输入更新失败,嵌套输出

时间:2016-10-24 19:48:38

标签: r shiny

以下最小示例演示了更新嵌套输出的问题,然后使用更新输出之前的内容更新输入。这个最小的例子来自一个更大的项目,所以除非Shiny实际上不允许嵌套输出,否则像“不嵌套输出”这样的问题的解决方案是不可行的。

运行示例时,您将看到两个单选按钮和一个文本输入。输入一些文字并更改单选按钮。您将看到在处理单选按钮事件后,文本输入确实已更新。但是,如果再次更改单选按钮,observeEvent()处的文本输入将为空白。

这就像updateTextInput()函数可以更新您在浏览器中看到的内容,但完全不适用于Shiny从下一个事件的浏览器返回的内容。

要添加一些奇怪的内容,还要注意,如果您以任何方式更改更新的文本输入(例如,向其中添加或删除一个字符),那么它将按预期工作。问题出在我的代码,我的期望还是Shiny中的错误?

ui <- fluidPage(fluidRow(column(12, tagList(
         uiOutput("outer_div")
      ))))

server <-function(input, output, session) {

updateScreen = function() {
   output$outer_div = renderUI(uiOutput("inner_div"))
   output$inner_div = renderUI(tagList(
      radioButtons(inputId = "button", label="", choices = c("A", "B")),
      textInput("text", label="", value="")
   ))
}
updateScreen()   #initialize screen

   observeEvent(input$button, {
      print(paste0("Text input is ", input$text))
      updateTextInput(session, inputId = "text" , value=input$text)
      updateRadioButtons(session, inputId="button", selected=input$button)
      updateScreen()
   })

}

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:0)

这对你有用吗?

ui <- fluidPage(fluidRow(column(12, tagList(
  uiOutput("outer_div")
))))

server <-function(input, output, session) {

  updateScreen = function() {
    output$outer_div = renderUI(uiOutput("inner_div"))
    output$inner_div = renderUI(tagList(
      radioButtons(inputId = "button", label="", choices = c("A", "B")),
      textInput("text", label="", value="")
    ))
  }
 updateScreen()   #initialize screen


    data <- isolate(input$text)
  observeEvent(input$button, {
    updateTextInput(session, inputId = "text" , value=data)
    updateRadioButtons(session, inputId="button", selected=input$button)
    print(paste0("Text input is ", input$text))
    #updateScreen()
  })

}

shinyApp(ui = ui, server = server)