Как установить реактивное значение по умолчанию в R Shiny? - PullRequest
0 голосов
/ 12 марта 2020

У меня проблема с обновлением реактивного значения в глянце.

Так что мое приложение в основном делает, чтобы сохранить textInputs от пользователя. Когда пользователь решает загрузить все текстовые входы, я хочу сбросить текстовые входы.

Следующий пример кода:

ui.R

ui <- fluidPage(
  sidebarPanel(
    textInput("words", "Please enter a word"), 

    actionButton("submit_new_word", "Save"), # this submits each single word
    textOutput("submitted_new_words"), # this show all submitted words

    actionButton("submit_upload", "Upload my Results") # this uploads all submitted words
  )
)

server.R

server <- function(input, output, session) {
  words_submitted <- paste("") # initial value 

  w_submitted <- eventReactive(input$submit_new_word, {
    words_submitted <- paste(words_submitted, " ", input$words)
    words_submitted <<- words_submitted

    updateTextInput(session, 
                    inputId = "words",
                    value = "") 

    return(words_submitted)
  }, ignoreNULL=FALSE)

  output$submitted_new_words <- renderText({
    w_submitted()
  })

  observeEvent(input$submit_upload, {
    # saveData(data_final) # upload, not needed for example here

    words_submitted <<- paste("")
  })
}

Если вы попробуете этот минимальный пример, вы увидите, что текстовые вводы будут сброшены, но только после после «Сохранить» снова нажимается кнопка.

Однако я хотел бы, чтобы при вводе кнопки «submit_upload» сбрасывались текстовые входы.

У кого-нибудь есть идея?

1 Ответ

1 голос
/ 12 марта 2020

Вам, вероятно, лучше всего сделать это с каким-то reactive. Блестящий способ заключается в том, что если к нему не присоединена реактивность, он не делает недействительными (refre sh) что-либо на стороне клиента, например renderText

library(shiny)

ui <- fluidPage(
        sidebarPanel(
                textInput("words", "Please enter a word"), 

                actionButton("submit_new_word", "Save"), # this submits each single word
                textOutput("submitted_new_words"), # this show all submitted words

                actionButton("submit_upload", "Upload my Results") # this uploads all submitted words
        )
)

v <- reactiveValues()

server <- function(input, output, session) {
        v$words_submitted <- paste("") # initial value 

        observeEvent(input$submit_new_word, {
                v$words_submitted <- paste(v$words_submitted, " ", input$words)
                updateTextInput(session, inputId = "words",value = "") 
        }, ignoreNULL=FALSE)

        output$submitted_new_words <- renderText({
                v$words_submitted
        })

        observeEvent(input$submit_upload, {
                # saveData(data_final) # upload, not needed for example here
                v$words_submitted <- paste("")
        })
}

# Run the application 
shinyApp(ui = ui, server = server)
...