【问题标题】:Modify a Shiny reactive expression with two forms of user input使用两种形式的用户输入修改 Shiny 反应式表达式
【发布时间】:2022-01-10 02:24:16
【问题描述】:

我想使用可以通过两种方式之一更新的反应式表达式。下面是一个非常简单的示例,使用数字输入或重置按钮将表达式设置回其原始状态(实际上表达式更复杂,因此不能使用反应值)。似乎只识别了 num 的第二个定义,因此在示例中忽略了数字输入)。
我错过了什么?
非常感谢!

ui <- fluidPage(
  numericInput("number", "Input", 1),
  actionButton("button", "Reset"),
  textOutput("check")
)
server <- function(input, output){
  num <- reactive({
    input$number
  })
  num <- eventReactive(input$button, {
    1
  })
  output$check <- renderText({
    num()
  })
}
shinyApp(ui, server)

【问题讨论】:

    标签: shiny expression reactive


    【解决方案1】:

    编辑:

    我们可以对每个输入使用observeEvent() 来更新num()

    library(shiny)
    
    ui <- fluidPage(
      numericInput("number", "Input", 1),
      actionButton("button", "Reset"),
      textOutput("check")
    )
    server <- function(input, output) {
      num <- reactiveVal()
    
      observeEvent(input$number, {
        num(input$number)
      })
    
      observeEvent(input$button, {
        num(1)
      })
    
      observeEvent(c(input$button, input$number), {
        output$check <- renderText({
          num()
        })
      })
    }
    shinyApp(ui, server)
    

    【讨论】:

    • 谢谢@jpdugo17,但这让我到达了我想要的地方。反应式表达式仅响应重置按钮,而不是数字输入(正如您可以看到的,重置按钮下的输出不响应数字输入)。还有什么想法吗?如果我之前的问题不清楚,我们深表歉意。
    • 应该读作“……那没有让我到达我想要的地方……”为了澄清,我的问题是让表达式响应两个输入,而不是更新数字输入。
    • 我编辑了答案,请看一下。
    • 如果我没记错的话,您希望输出显示来自input$number 的值,如果按下按钮,输出应该返回 1?
    • 这就是诀窍!如此简单,我只是看不到它。感谢您的耐心@jpdugo17。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多