如何使提交按钮仅从Shiny(R)中的相应textInput获取值

时间:2014-04-23 16:50:53

标签: r shiny

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

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

shinyUI(

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

)

3 个答案:

答案 0 :(得分:1)

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

这样的事情:

UI.R

library(shiny)    

shinyUI(basicPage(

    textInput("variable", "Add Recommendation", ""),
    actionButton("submit", "Add"),
    textOutput("text")

))

server.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})

})

答案 1 :(得分:0)

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)

答案 2 :(得分:0)

更简单的方法是将提交按钮直接添加到渲染函数中。 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)