如何使submit按钮仅从Shiny(R)中的相应文本输入中获取值

如何使submit按钮仅从Shiny(R)中的相应文本输入中获取值,r,shiny,R,Shiny,我的闪亮应用程序中有一个文本输入字段。我想在textInput旁边有一个submit按钮(或者Action按钮,可能更有意义?),这样当文本添加到textInput时,用户可以点击按钮,应用程序的唯一反应就是接收该值(而不是加载页面上的任何其他内容),这是如何实现的 如果我使用以下代码,它将加载所有内容 shinyUI( textInput("variable", "Add Recomendation", ""), submitButton("Add") ) 我认为您需要在服务器中使用一个

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

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

shinyUI(

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

)

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

大概是这样的:

用户界面

服务器.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})

})
库(闪亮)
shinyServer(功能(输入、输出){
值(0){
值$variable
库(闪亮)
#为绘制直方图的应用程序定义UI

ui一种更简单的方法是将提交按钮直接添加到呈现函数中。
req(input$submit)
确保呈现函数监听按钮的按下。此外,我们还必须
隔离()
input$variable
。否则,渲染功能不仅会在按下按钮时调用,还会在每次
input$variable
更改时调用

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

库(闪亮)

在代码中有注释的UI是很好的。为了使答案高超,可以考虑在代码块之外添加一点解释上下文。有时只有一行或两行文本会走很长的路。
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})

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