2016-09-07 1 views
0

Я немного ржавый к блестящей реактивности, но я хочу сделать две вещи, когда кнопка нажата: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). Любая помощь высоко ценится!

+0

Я не думаю, что вы можете динамически создавать кнопки, которые зависят от самих себя. – Carl

+0

Я не думаю, что они зависят от самих себя; только ярлык зависит от нажатия кнопки. Я просто хочу записать этот ярлык, а затем изменить его. –

ответ

2

Вот способ сделать это с 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) 

 Смежные вопросы

  • Нет связанных вопросов^_^