다음 최소 예제는 중첩 된 출력을 업데이트 한 다음 출력을 업데이트하기 전의 내용으로 입력을 업데이트하는 문제를 보여줍니다. 이 최소한의 예제는 훨씬 더 큰 프로젝트에서 나옵니다. 따라서 Shiny가 실제로 중첩 출력을 허용하지 않는 한 "출력을 중첩하지 마십시오"와 같은 문제에 대한 솔루션은 실행 가능하지 않습니다.중첩 된 출력으로 반짝이는 입력 업데이트가 실패합니다.
예제를 실행하면 두 개의 라디오 버튼과 텍스트 입력이 표시됩니다. 텍스트를 입력하고 라디오 버튼을 변경하십시오. 라디오 버튼 이벤트가 처리 된 후 텍스트 입력이 실제로 업데이트 된 것을 볼 수 있습니다. 그러나 라디오 버튼을 두 번째로 변경하면 observeEvent()
에있는 텍스트 입력이 비어있게됩니다.
updateTextInput()
기능은 브라우저에서 보는 것을 업데이트하는 것처럼 작동하지만, 다음 이벤트의 입력에 대해 브라우저에서 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)
아마도 '반짝 반짝 0.14'의 'insertUI'가 중첩 된 UI보다 나은 해결책입니다. –
이 목표는 정확히 무엇입니까? 나는 몇 가지 해결책을 생각할 수 있지만 ... 나는 누군가의 시간을 낭비하지 않도록하고 싶다. –
방금 들었던 몇 가지. 라디오 그룹의 변경 사항에 대한 응답을 기반으로 텍스트 입력을 업데이트하려고합니다 ... 그러나 입력의 현재 값이 무엇이든간에 텍스트 입력을 업데이트하고 있습니다. 코드 실행을 올바르게 읽는다면 아무 것도 업데이트하지 않을 것입니다. 또한; 'print()'함수는 어디에서 cat'ing하고 있나? 또한; updateScreen ouside를 반응 적으로 호출 한 다음 다시 관찰자에서 호출하면 no를 생성 할 수 있습니까? –