Это предотвращает проблему с каждым обновлением ввода, так как обновление элемента ввода обновит его соответствующий ввод, что вызовет обновление исходного элемента управления.В лучшем случае это дублирует работу и имеет непредсказуемые последствия или, в худшем случае, бесконечные циклы в сочетании с другими функциями.Обновление общей скрытой переменной решает эту проблему.Это также позволит любому количеству элементов управления влиять на переменную без необходимости обновления.
ui <- fluidPage(
numericInput("year", "", min = 1979, max = 2017, value = 1979),
sliderInput("year2", "Select Year", min = 1979, max = 2017, value = 1979),
textOutput("variableprint")
)
#===================================================
server <- function(input, output, session) {
reactiveVar <- reactiveValues(commonHiddenVar = NULL)
observeEvent(input$year, {
if(identical(input$year, input$year2)){
print("update1") #for testing
reactiveVar$commonHiddenVar <- input$year
} else {
updateSliderInput(session, "year2", value = input$year)
}
})
observeEvent(input$year2, {
if(identical(input$year, input$year2)){
print("update2") #for testing
reactiveVar$commonHiddenVar <- input$year2
} else {
updateNumericInput(session, "year", value = input$year2)
}
})
output$variableprint <- renderText(reactiveVar$commonHiddenVar)
}
shinyApp(ui, server)
Вы заметите, что «update1» или «update2» будут печататься только один раз.Если они были добавлены в другом ответе, они напечатали бы оба.