这是一个相当常见的问题,我在网上找了几个小时,但无法解决我的问题。
由于使用了三个输入的updateNumericInput
,我目前正试图摆脱无限循环(对任何输入的更改都应该触发对其他两个的更新)。我以为通过debounce
或throttle
添加一些延迟就可以了,但我不能让它工作。下面是我能做的最好的:
library(shiny)
ui <- fluidPage(
numericInput(inputId = "num",
label = "Num:",
value = 10,
min = 1),
uiOutput("num1"),
uiOutput("num2")
)
server <- function(input, output, session) {
num <- reactive({ input$num }) %>% debounce(2000)
output$num1 = renderUI({
numericInput(inputId = "num1",
label = "Num1:",
value = num(),
min = 1)
})
output$num2 = renderUI({
numericInput(inputId = "num2",
label = "Num2:",
value = num(),
min = 1)
})
observeEvent(input$num1, {
updateNumericInput(session, 'num', value = input$num1)
})
observeEvent(input$num2, {
updateNumericInput(session, 'num', value = input$num2)
})
}
shinyApp(ui = ui, server = server)
这只是部分工作:更新input$num
会使更新num1
和num2
延迟2秒。但是,更新input$num1
会立即更新input$num
。
我尝试去反跳两个observeEvent
调用,但失败了。据我所知,去抖只对React值起作用。
所以我也尝试创建React值num1()
和num2()
,并在observeEvent
中使用它们。但奇怪的是,这导致了num1
和num2
的变化,并没有触发num
的更新。
我怎样才能保持所有三个输入同步,而不进入臭名昭著的无限循环?
1条答案
按热度按时间x0fgdtte1#
下面的代码示例是否适用于您的porpuse: