繁体   English   中英

R Shiny 仅观察到特定的反应性值变化

[英]R Shiny observe only a specific reactiveVal change

只有当特定的reactiveVal发生变化时, observe函数才可能触发吗?

在我的带有反应和观察者的全代码交叉引用模块中,我有一些东西可以归结为以下玩具示例:

library(shiny)

shinyApp(
  fluidPage(
    textInput('i1', 'Input 1'),
    textInput('i2', 'Input 2'),
    textInput('out', 'Output (do not edit)')
  ),
  function(input, output, session) {
    observe({ print(input$i2); updateTextInput(session, 'out', value = input$i1) })
    observe({ print(input$i1); updateTextInput(session, 'out', value = input$i2) })
  }
)

请注意,如果没有打印语句,代码将按照我希望的方式工作。 但是,如果两个观察者都使用两个输入,那么两个观察者都会顺序触发,并且只有来自第二个观察者的input$i2被放入我的out textInput 中。

有什么方法可以让我告诉闪亮,我只希望第一个observeinput$i1更改时运行,而第二个observeinput$i2更改时运行?

编辑

原来你可以在输入上使用observeEvent来区分它们。 然而,在现在比较绕口例子,我不能够使用observeEventreactiveVal -在它不火,在所有的情况下。 同样,下面的示例在没有打印语句的情况下工作,但是两个观察者都会触发。

有没有一种方法来观察一个变化reactiveVal

library(shiny)

shinyApp(
  fluidPage(
    textInput('i1', 'Make uppercase'),
    textInput('i2', 'Make lowercase'),
    textInput('out', 'Output (ideally not editable)')
  ),
  function(input, output, session) {
    i1 <- reactiveVal('')
    i2 <- reactiveVal('')

    observeEvent(input$i1, { i1(toupper(input$i1)) })
    observeEvent(input$i2, { i2(tolower(input$i2)) })

    observe({ print(i2()); updateTextInput(session, 'out', value = i1()) })
    observe({ print(i1()); updateTextInput(session, 'out', value = i2()) })
  }
)

observeEvent可以与任何反应性上下文一起工作,这里是它如何与reactiveVal工作的例子

library(shiny)

shinyApp(
  fluidPage(
    textInput('i1', 'Make uppercase'),
    textInput('i2', 'Make lowercase'),
    textInput('out', 'Output (ideally not editable)')
  ),
  function(input, output, session) {
    i1 <- reactiveVal('')
    i2 <- reactiveVal('')
    
    observeEvent(input$i1, { i1(toupper(input$i1)) })
    observeEvent(input$i2, { i2(tolower(input$i2)) })
    
    observeEvent(i1(), {print(i1()); updateTextInput(session, 'out', value = i1()) })
    observeEvent(i2(), {print(i2()); updateTextInput(session, 'out', value = i2()) })
  }
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM