【问题标题】:Shiny: add button label to sidebar & update buttons after click闪亮:将按钮标签添加到侧边栏并在单击后更新按钮
【发布时间】:2016-09-07 15:31:34
【问题描述】:

我对 Shiny 的反应性有点生疏,但我想在单击按钮时做两件事:

  1. 将该按钮标签添加到侧边栏(并在更多点击后向侧边栏添加更多标签)
  2. 更新按钮标签(即更多随机整数)

我对在录制之前更改标签感到紧张,所以我想把握好时机。这是我正在使用的框架:

library(shiny)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel( 
      textOutput("clicks")
    ),
    mainPanel(
      uiOutput("button1"), 
      uiOutput("button2")
    ))
)
###################
server <- function(input, output, session) {

  output$clicks <- renderText({
    paste()
  })

  ## reactive values
  inside <- reactive({
    inside <- sample(1:100,2)
  })

  ## buttons
  output$button1 <- renderUI({
    actionButton("course1", label = inside()[1], style='padding:50px')
  })
  output$button2 <- renderUI({
    actionButton("course2", label = inside()[2], style='padding:50px')
  })
}

shinyApp(ui = ui, server = server)

现在侧边栏是空白的,因为我不知道如何添加它,或者在单击后添加什么以使按钮标签更新(无论是在 reactive 值还是 observeEvent 内进行) .非常感谢任何帮助!

【问题讨论】:

  • 我不认为你可以动态生成依赖于自己的按钮。
  • 我认为他们不依赖自己;只是标签取决于单击按钮。我只想记录那个标签,然后改变它。

标签: r shiny reactive-programming


【解决方案1】:

这是一种使用 reactiveValues 的方法:

library(shiny)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel( 
      textOutput("clicks")
    ),
    mainPanel(
      uiOutput("button1"), 
      uiOutput("button2")
    ))
)
###################
server <- function(input, output, session) {
  # Show history
  output$clicks <- renderText({
    history[['clicked']]
  })

  ## reactive values
  # store history as reactive values
  history <- reactiveValues(clicked = c())
  # update history when a button is clicked
  observeEvent(input$course1,{
    history[['clicked']] <- c(history[['clicked']],inside()[1])
  })

  observeEvent(input$course2,{
    history[['clicked']] <- c(history[['clicked']],inside()[2])
  })
  #update inside when history updates
  inside <- reactive({
    history[['clicked']]
    inside <- sample(1:100,2)
  })

  ## buttons
  output$button1 <- renderUI({
    actionButton("course1", label = inside()[1], style='padding:50px')
  })
  output$button2 <- renderUI({
    actionButton("course2", label = inside()[2], style='padding:50px')
  })
}

shinyApp(ui = ui, server = server)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-11
    • 2022-01-26
    • 2022-11-11
    • 2017-06-20
    • 2019-07-02
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    相关资源
    最近更新 更多