我想观察 input 中的变化。当 input 更改时,应更新 output

    output = reactiveValues(a = 10)
    input = reactiveValues(act1 = 0, act2 = 0)
    eventReactive(input$act1, { output$a = 20 })
    eventReactive(input$act2, { output$a = 30 })
    isolate(input$act1)
    # 0
    isolate(output$a)
    # 10
    input$act1 = 1
    isolate(output$a)
    # 10
    isolate(input$act1)
    # 1

我原以为 output$a 在更改 input$act1 后会变成 20。但这并没有发生。

由于 input 是一个 react 值对象,它应该调用 eventReactive 返回的 react 表达式对象。为什么 output$a 没有更新?

最佳答案

eventReactive 确实返回一个响应式(Reactive)表达式,它是一个函数并且被惰性计算。要评估响应式(Reactive)表达式,需要满足两个条件:

  • 必须有一个依赖于它的输出元素
  • 至少其依赖项之一必须无效

  • 由于您的代码会立即丢弃新创建的表达式,因此很明显它们不是依赖值,也没有理由进行评估。

    据我了解您的意图,您需要的是一个观察者,与响应式(Reactive)表达不同,它会被急切地评估。
    observeEvent(somevent, { someAction() })
    

    附带说明一下,对副作用使用响应式(Reactive)表达式通常不是一个好习惯。

    关于r - 在 R Shiny 中观察输入的变化并更新输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32664872/

    10-12 17:52