【发布时间】:2020-01-03 10:45:42
【问题描述】:
我正在尝试使用Shiny。我习惯了其他编程语言(App Development 中的一点点 Java),其中有 onClick 事件,会触发其他变量的更改。我知道在 MVC 中,在视图元素发生更改后,控制器可以在后台更改模型变量,然后更新视图而不会触发其他元素上的事件无限循环。
这里的代码有效,但它触发了不必要的和不需要的循环:
如果您选择 49 作为 n,则数十个更改为 4,这将 n 更改为 48,这将更改为 4,这不会触发更改事件。
如果您随后将 n 更改为 49,则几十个更改为 4,这不会触发更改事件。
这似乎是浪费和资源密集型..
library(shiny)
ui <- fluidPage(
sliderInput(inputId = "dozens",
label = "Dozens:",
min = 1,
max = 5,
value = 2),
sliderInput(inputId = "n",
label = "n:",
min = 1,
max = 60,
value = 24)
)
server <- function(input, output,session) {
observeEvent(input$dozens,{
updateSliderInput(session,"n",value=12*input$dozens)
})
observeEvent(input$n,{
updateSliderInput(session,"dozens",value=round(input$n/12))
})
}
shinyApp(ui = ui, server = server)
正确的方法是什么?
【问题讨论】:
-
不确定,但也许您可以使用
observeEvent(list(input$dozens,input$n),{ ...... }并将两个 updateSliderInput 分组以代替.......。对不起,如果它很傻,我没有尝试过。 -
感谢您的想法。然后我需要区分这两个值中的哪一个在表达式内部发生了变化。我该怎么做?
-
啊,是的,抱歉,这不是一个好主意。我需要醒来。我知道几天前有人问过类似的问题。
标签: r shiny reactive observers