我的闪亮应用中有一个textInput字段。我想在textInput旁边有一个提交按钮(或者操作按钮可能更有意义吗?),这样当文本添加到textInput时,用户可以点击按钮,App所采取的唯一反应是接受该值(不加载页面上的任何其他内容)如何实现?
如果我使用以下代码,它会加载所有内容。
shinyUI(
textInput("variable", "Add Recomendation", ""), submitButton("Add")
)
答案 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)