R Shiny应用提交按钮失效问题求助(附Server.R代码)
解决R Shiny提交按钮无法触发内容显示的问题
嘿,我看到你遇到了Shiny应用里提交按钮不工作的问题,而且你的Server.R代码里还有个小拼写错误(最后一行的input写成了inpu...),这会直接导致代码跑不起来。另外,你现在的renderText是实时响应输入框变化的,没有绑定提交按钮的点击事件,所以自然没法实现“点击提交后才显示内容”的需求。
下面是修复后的完整方案,包含UI和Server部分(如果你的项目是分文件的,就把UI代码放到UI.R里,Server代码放到Server.R里;如果是单文件app.R,就把两部分合并到一起):
完整代码示例
先看UI部分(需要添加提交按钮和对应的输出区域)
library(shiny) ui <- fluidPage( # 四个输入框 textInput("text1", "输入州名:"), textInput("text2", "输入收入:"), textInput("text3", "输入增长率:"), textInput("text4", "输入州自有税收:"), # 提交按钮,这里给它起名叫submit_btn actionButton("submit_btn", "提交"), # 输出区域,这里我用了verbatimTextOutput来显示多行文本,也可以拆成多个textOutput verbatimTextOutput("result") )
再看修复后的Server部分
server <- function(input, output) { # 用eventReactive监听提交按钮的点击事件,只有点击后才会收集输入内容 submitted_info <- eventReactive(input$submit_btn, { list( state = input$text1, revenue = input$text2, growth = input$text3, tax = input$text4 ) }) # 渲染输出内容,只有当提交按钮被点击后,submitted_info()才会返回值 output$result <- renderText({ info <- submitted_info() paste0( "state name is as : ", info$state, "\n", "revenue is as : ", info$revenue, "\n", "rate of growth : ", info$growth, "\n", "state own tax : ", info$tax ) }) } # 运行Shiny应用 shinyApp(ui = ui, server = server)
关键修改点说明
- 修复拼写错误:把最后一行的
inpu...改成正确的input$text4 - 添加提交触发逻辑:用
eventReactive绑定提交按钮的input$submit_btn事件,只有点击按钮时才会读取输入框的内容 - 控制输出时机:所有输出的渲染都依赖
submitted_info(),而这个对象只有在按钮点击后才会有值,所以实现了“点击提交才显示内容”的效果
如果你还是想要四个独立的输出框,也可以这么改:
修改后的Server部分
server <- function(input, output) { submitted_info <- eventReactive(input$submit_btn, { list( state = input$text1, revenue = input$text2, growth = input$text3, tax = input$text4 ) }) output$txt1 <- renderText({ paste("state name is as :", submitted_info()$state) }) output$txt2 <- renderText({ paste("revenue is as :", submitted_info()$revenue) }) output$txt3 <- renderText({ paste("rate of growth :", submitted_info()$growth) }) output$txt4 <- renderText({ paste("state own tax :", submitted_info()$tax) }) }
对应的UI部分要改成
ui <- fluidPage( textInput("text1", "输入州名:"), textInput("text2", "输入收入:"), textInput("text3", "输入增长率:"), textInput("text4", "输入州自有税收:"), actionButton("submit_btn", "提交"), # 四个独立的输出框 textOutput("txt1"), textOutput("txt2"), textOutput("txt3"), textOutput("txt4") )
这样点击提交按钮后,四个输出框就会分别显示对应的输入内容啦。
内容的提问来源于stack exchange,提问作者ns28
相关产品推荐
相关产品推荐

