【问题标题】:How to make submit button only take value from corresponding textInput in Shiny (R)如何使提交按钮仅从 Shiny (R) 中的相应 textInput 中获取值
【发布时间】:2014-04-23 16:50:53
【问题描述】:

我的闪亮应用中有一个 textInput 字段。我想在 textInput 旁边有一个提交按钮(或可能更有意义的操作按钮?),这样当文本被添加到 textInput 时,用户可以点击按钮,应用程序唯一的反应就是接受该值(不在页面上加载任何其他内容)如何实现?

如果我使用以下代码,它会加载所有内容。

shinyUI(

textInput("variable", "Add Recomendation", ""), submitButton("Add")

)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    我认为您需要在服务器中使用actionButton() 和观察者。还要确保将 input$variable 包装在隔离中,这样它就不会导致观察者触发。

    类似这样的:

    UI.R

    library(shiny)    
    
    shinyUI(basicPage(
    
        textInput("variable", "Add Recommendation", ""),
        actionButton("submit", "Add"),
        textOutput("text")
    
    ))
    

    服务器.R

    library(shiny)
    
    shinyServer(function(input, output) {
    
        values <- reactiveValues(variable = NA)
    
        observe({
    
            if(input$submit > 0) {
    
                values$variable <- isolate(input$variable)
    
            }
    
        })
    
        output$text <- renderText({values$variable})
    
    })
    

    【讨论】:

      【解决方案2】:
      library(shiny)
      
      # Define UI for application that draws a histogram
      ui <- (basicPage(
        
        textInput("variable", "Add Recommendation", ""),
        actionButton("submit", "Add"),
        textOutput("text")
        
      ))
      
      # Define server logic required to draw a histogram
      server <- function(input, output) {
        name <- reactive({
          return(input$variable)
        }) 
        
        observeEvent(input$submit, {
          output$text = renderText(name())
          
        })
      }
      
      # Run the application 
      shinyApp(ui = ui, server = server)
      

      【讨论】:

      • 在代码中包含 cmets 很好。为了使答案出色,可以考虑在代码块之外添加一些解释上下文。有时只有一两行文字就够用了。
      【解决方案3】:

      更简单的方法是将提交按钮直接添加到渲染函数中。 req(input$submit) 确保渲染函数监听按钮按下。此外,我们必须isolate()input$variable。否则,不仅会在按下按钮时调用渲染函数,而且还会在每次input$variable发生变化时调用。

      与以前的解决方案相比有一个区别:虽然反应式表达式/值可能有助于更复杂的应用程序,但我们在这里不需要它,可以直接访问 input$variable 的值。

      library(shiny)
      
      ui <- basicPage(
        textInput("variable", "Add Recommendation", ""),
        actionButton("submit", "Add"),
        textOutput("text")
      )
      
      server <- function(input, output) {
        output$text = renderText({
          req(input$submit)
          return(isolate(input$variable))
        })
      }
      
      # Run the application
      shinyApp(ui = ui, server = server)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-10
        • 1970-01-01
        • 2013-04-26
        • 2020-05-22
        相关资源
        最近更新 更多