我想为某些observeEvent
调用特定的反应式表达式,并将其与其他observeEvent
隔离。下面我有我想要实现的最小代码(我的实际应用程序包含许多调用反应式表达式的observeEvent
)。
library(shiny)
ui <- fluidPage(
numericInput("Num1", "First number:", 0),
numericInput("Num2", "Second number:", 0),
textOutput("Answer"),
actionButton("Button_1", "Call reactive"),
actionButton("Button_2", "Don't Call reactive")
)
server <- function(input, output){
Ans <- reactive({
a <-input$Num1 + input$Num2
a
})
observeEvent(input$Button_1, {
output$Answer <- renderText({Ans()})
})
observeEvent(input$Button_2, {
output$Answer <- renderText({isolate(Ans())})
})
}
shinyApp(ui = ui, server = server)
在上面的应用中,我有两个actionButtons
Button_1
(呼叫被动)和Button_2
(请勿呼叫被动)。正如标签建议的第一个按钮(Button_1
)我希望每次单击按钮时调用反应式表达式,但是对于第二个按钮(Button_2
),我希望不要调用反应式表达式(即使输入改变)。为了防止调用反应式表达式的Button_2
表单,我添加了isolate
,但这并不会阻止调用反应式表达式。
即使输入发生变化,是否有任何方法可以隔离反应式表达式?
答案 0 :(得分:3)
您可以使用?eventReactive()
。
所以用{/ p>替换reactive()
函数
Ans <- eventReactive(input$Button_1,{
input$Num1 + input$Num2
})
(然后您也可以删除isolate()
功能。)
正如您所提到的,您有几个observeEvent()
和更多可能的条件,值得一提的是,这也适用于多种条件:
Ans <- eventReactive({input$Button_1;input$Button_2;...},{
input$Num1 + input$Num2
})