改变反应性表达,保持观察者
Change reactive expression, keep observer
我怎样才能 overwrite/re-define 一个反应式表达式,同时保持该表达式的所有观察者完好无损?
下面的例子旨在让观察者听到按钮点击,但只有在按钮被点击一次之后。在此之前,观察者应该对数字输入字段做出反应。 (请注意,如果可能的话,我希望观察者保持不变。我想重新定义反应式表达式。)
library(shiny)
ui <- fluidPage(
numericInput(inputId="some_numbers",value=8,label = "Enter a number:"),
actionButton(inputId = "button1",label="Update reactive expression")
)
server <- function(input, output, session) {
my_reactive_expr <- reactive({
input$some_numbers
})
observeEvent(my_reactive_expr(),{
print("reactive value change detected!")
})
observeEvent(input$button1,{
my_reactive_expr <<- reactive({
input$button1
})
})
}
shinyApp(ui = ui, server = server)
就像评论中写的一样,我会建议这样的东西:
my_reactive_expr <- reactive({
if(!input$button1) return(input$some_numbers)
input$button1
})
完整的应用程序如下:
library(shiny)
ui <- fluidPage(
numericInput(inputId="some_numbers",value=8,label = "Enter a number:"),
actionButton(inputId = "button1",label="Update reactive expression")
)
server <- function(input, output, session) {
my_reactive_expr <- reactive({
if(!input$button1) return(input$some_numbers)
input$button1
})
observeEvent(my_reactive_expr(),{
print("reactive value change detected!")
})
observeEvent(input$button1,{
my_reactive_expr <<- reactive({
input$button1
})
})
}
shinyApp(ui = ui, server = server)
这样你就可以避免覆盖反应函数。
我怎样才能 overwrite/re-define 一个反应式表达式,同时保持该表达式的所有观察者完好无损?
下面的例子旨在让观察者听到按钮点击,但只有在按钮被点击一次之后。在此之前,观察者应该对数字输入字段做出反应。 (请注意,如果可能的话,我希望观察者保持不变。我想重新定义反应式表达式。)
library(shiny)
ui <- fluidPage(
numericInput(inputId="some_numbers",value=8,label = "Enter a number:"),
actionButton(inputId = "button1",label="Update reactive expression")
)
server <- function(input, output, session) {
my_reactive_expr <- reactive({
input$some_numbers
})
observeEvent(my_reactive_expr(),{
print("reactive value change detected!")
})
observeEvent(input$button1,{
my_reactive_expr <<- reactive({
input$button1
})
})
}
shinyApp(ui = ui, server = server)
就像评论中写的一样,我会建议这样的东西:
my_reactive_expr <- reactive({
if(!input$button1) return(input$some_numbers)
input$button1
})
完整的应用程序如下:
library(shiny)
ui <- fluidPage(
numericInput(inputId="some_numbers",value=8,label = "Enter a number:"),
actionButton(inputId = "button1",label="Update reactive expression")
)
server <- function(input, output, session) {
my_reactive_expr <- reactive({
if(!input$button1) return(input$some_numbers)
input$button1
})
observeEvent(my_reactive_expr(),{
print("reactive value change detected!")
})
observeEvent(input$button1,{
my_reactive_expr <<- reactive({
input$button1
})
})
}
shinyApp(ui = ui, server = server)
这样你就可以避免覆盖反应函数。