2016-10-20 11 views
1

私は2つのアクションボタンを備えたこのシンプルな光沢のあるアプリを持っています。 「レンダー」ボタンはスライダ入力コントロールをレンダリングし、「削除」ボタンは同じスライダ入力を削除します。これはうまく動作しますが、同じスライダー入力を再レンダリングしようとすると、2回目は機能しません。どのようなアイデアや説明は、コードに間違っている可能性がありますか?同じUIをもう一度やり直してください

これはコードです:

ui <- fluidPage(
      actionButton("render", "Render"), 
      actionButton("remove", "Remove"), 
      uiOutput("moreControls") 
    ) 

    server <- function(input, output) { 
      observeEvent(input$render, { 
        if (input$render > 0) { 
          output$moreControls <- renderUI({ 
            tagList(
              sliderInput("n", "N", 1, 1000, 500) 
            ) 
          })  
        } 
      }) 
      observeEvent(input$remove, { 
        if (input$remove > 0) { 
          removeUI(
            selector = "div[id='moreControls']" 
          ) 
        } 
      }) 

    } 
    shinyApp(ui, server) 

答えて

1

あなたはそれを削除するにはNULLに制御を設定することができます。コードを参照してください。

library(shiny) 

ui <- fluidPage(
    actionButton("render", "Render"), 
    actionButton("remove", "Remove"), 
    uiOutput("moreControls") 
) 

server <- function(input, output) { 

    rv <- reactiveValues() 

    observeEvent(input$render, { rv$action <- 'render' }) 
    observeEvent(input$remove, { rv$action <- 'remove' }) 

    output$moreControls <- renderUI({ 

    if (is.null(rv$action)) {return(NULL)} 

    if(rv$action == 'render'){ 
     sliderInput(inputId = "n",label = "N", min = 1, max = 1000, value = 500)  
    } else { 
     return(NULL) 
    } 
    }) 
} 
shinyApp(ui, server) 
+0

答えに感謝します。私のコードに何が間違っているのでしょうか? –

+0

removeUIはスライダーを削除しますが、更新することはできません。 insertUIを使用して新しいものを生成することができます。 –

+0

私は、updateUIではなくrenderUIを使用してスライダを再レンダリングしていることを私に混乱させます。あなたのソリューションは動作しますが、自分のコードが機能しないように自分自身に説明することはできません。 –