我想使用两种方法来更新单个输入。
假设我要使用NumericInput和SliderInput。
当我将NumericInput更新为5时,SliderInput应该更新为5。
不管我上面说什么,我都看过很多例子。
但是我该如何做呢? (互相更新)
现在,如果将SliderInput更新为6,如何将NumericInput更新为6?
这里是我尝试过但没有起作用的内容:
ui <- fluidPage(
numericInput("year", "", min = 1979, max = 2017, value = 1979),
sliderInput("year", "Select Year", min = 1979, max = 2017, value = 1979)
)
#===================================================
server <- function(input, output, session) {
observe(input$year, {
updateSliderInput(session, "year", value = year)
})
observe(input$year, {
updateNumericInput(session, "year", value = year)
})
答案 0 :(得分:1)
这避免了刷新每个输入的问题,因为更新输入元素将刷新其对应的输入,这将触发刷新原始控件。与其他功能结合使用时,这充其量只能做到重复的工作,并且可能带来不可预测的后果,或者在最坏的情况下会产生无限循环。 更新通用的隐藏变量可以解决此问题。它还将允许任何数量的控件影响变量,而不会发生不必要的刷新。
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”仅打印一次。如果在其他答案中添加了这些内容,则会同时打印两者。
答案 1 :(得分:0)
你的意思是这样吗?
ui <- fluidPage(
numericInput("year", "", min = 1979, max = 2017, value = 1979),
sliderInput("year2", "Select Year", min = 1979, max = 2017, value = 1979)
)
#===================================================
server <- function(input, output, session) {
observeEvent(input$year, {
updateSliderInput(session, "year2", value = input$year)
})
observeEvent(input$year2, {
updateNumericInput(session, "year", value = input$year2)
})
}
shinyApp(ui, server)