Shiny应用中actionButton需二次点击才生效的问题求解
Shiny多按钮点击切换图片首次点击无响应问题解决方案
问题根源
首次点击不切换的核心原因是索引逻辑冲突:
- 初始0次点击时,代码调用了
myimage1[1]、myimage2[1]作为默认展示内容 - 首次点击后总点击数
nclick=1,依然调用的是myimage1[1]、myimage2[1],两组图片完全一致,视觉上就会误以为首次点击没有生效,直到第二次点击nclick=2调用索引为2的图片才会看到变化
修复方案
单独定义默认展示图片,和点击后切换的图片数组完全隔离,同时改用更稳定的observeEvent监听点击事件,避免不必要的触发,修改后完整代码如下:
library(shiny) library(shinyjs) ui <- fluidPage( id="main", title="Risk and ambiguity", useShinyjs(), fluidRow(wellPanel( splitLayout(cellWidths = c("50%", "50%"), column(6,uiOutput("image1")), column(6,uiOutput("image2")) ))), fluidRow(wellPanel( splitLayout(cellWidths = c("33%", "33%", "33%"), column(12,align="center",actionButton("action11", label = "Je choisis option A")), column(12,align="center",actionButton("action12", label = "Je choisis le sac avec A et B")), column(12,align="center",actionButton("action13", label = "Je choisis option B")) ))) ) server <- function(input, output, session){ rv <- reactiveValues(img11=NULL, img12=NULL) # 初始默认展示图片,可按需替换为你实际的默认文件名 default_img1 <- "2betA_green.jpg" default_img2 <- "2betB_green.jpg" # 点击后切换的6组图片,可按需替换为你实际的图片文件名 myimage1 <- c("1betA_green.jpg", "mouse.png","EC.jpg", "man_log.png", "cube.png", "hotdog.png") myimage2 <- c("1betB_green.jpg", "cube.png", "hotdog.png", "YBS.png", "mouse.png","EC.jpg") output$image1 <- renderUI({tags$img(src=rv$img11, height = "80%", width = "80%", align = "left")}) output$image2 <- renderUI({tags$img(src=rv$img12, height = "80%", width = "80%", align = "right")}) # 页面初始化加载默认图片 observe({ rv$img11 <- default_img1 rv$img12 <- default_img2 }) # 监听任意按钮的点击事件 observeEvent({ input$action11 input$action12 input$action13 },{ nclick <- sum(as.numeric(input$action11), as.numeric(input$action12), as.numeric(input$action13)) if(nclick <= 6){ rv$img11 <- myimage1[nclick] rv$img12 <- myimage2[nclick] } }) } shinyApp(ui = ui, server = server)
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

