R Shiny中如何点击actionButton在运行时更新数据
Shiny点击按钮才更新输出解决方案
修改后完整可运行代码
library(shiny) ui <- fluidPage( titlePanel("My Shop App"), sidebarLayout( sidebarPanel( helpText("Controls for my app"), selectInput("item", label = "Choose an item", choices = list("Keyboard", "Mouse", "USB")), sliderInput("price", label = "Set Price:", min=0, max = 100, value=10), actionButton ("update","Update Price") ), mainPanel( helpText("Selected Item:"), verbatimTextOutput("item"), helpText("Price"), verbatimTextOutput("price") ) ) ) # 适配shiny 1.6.0及以上版本的简洁写法 server <- function(input, output) { # 输出仅在点击update按钮时触发更新 output$item <- renderText(input$item) |> bindEvent(input$update) output$price <- renderText(input$price) |> bindEvent(input$update) } shinyApp(ui = ui, server = server)
兼容旧版Shiny的写法
如果使用的Shiny版本低于1.6.0不支持bindEvent,可以用eventReactive实现相同效果:
server <- function(input, output) { # 仅点击按钮时更新存储的输入值 current_input <- eventReactive(input$update, { list( item = input$item, price = input$price ) }) output$item <- renderText({ current_input()$item }) output$price <- renderText({ current_input()$price }) }
问题原因说明
- 原代码存在重复定义输出的逻辑问题:既在
eventReactive内部给output赋值,又在外部重复给output赋值,外部的赋值没有绑定触发事件,所以输入控件值变化时输出会自动更新。 - 优化后的代码将输出渲染逻辑和更新按钮的点击事件做了绑定,只有点击按钮时才会读取当前输入值更新输出,修改输入控件时不会触发输出更新。
内容的提问来源于stack exchange,提问作者Safeer Ullah
相关产品推荐
相关产品推荐

