R Shiny: eventReactive / ObserveEvent, eventExpr имеет AND - PullRequest
0 голосов
/ 22 апреля 2020

Как сделать, чтобы выражение eventReactive / ObserveEvent, eventExpr зависело от двух входов, скажем, actionButton и selectInput. Я пытаюсь обновить значения третьего selectInput, только если первый selectInput изменится и нажата кнопка действия. Но сохраните исходные значения, если нажата только actionButton, и ничего не сделайте, если изменилось только первое selectInput.

Я пытался:

observeEvent({input$selectInput1 & input$actionButton}, {
    updateSelectInput(session = session, inputId = "input2", label = "b", choices = input$selectInput1, selected = input$selectInput1)
})

Но я не могу используйте & в eventExpr

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Это имеет желаемое поведение? При этом используются 2 reactiveValues флаги, которые изменяются при выборе других входов. Требуется изменить оба флага перед обновлением третьего входа.

library(shiny)

ui <- fluidPage(
  selectInput("si1", "Input 1", choices = c("A", "B"), selected = "A"),
  selectInput("si2", "Input 2", choices = c("Default", "Changed"), selected = "Default"),
  actionButton("button", "Action Button")
)

server <- function(input, output, session) {

  rv <- reactiveValues(si1 = FALSE, button = FALSE)

  observeEvent(input$si1, {
    rv$si1 <- TRUE
  }, ignoreInit = TRUE)

  observeEvent(input$button, {
    rv$button <- TRUE
  }, ignoreInit = TRUE)

  observe({
    if (rv$si1 && rv$button) {
      updateSelectInput(session, "si2", label = "Input 2", selected = "Changed")
      rv$si1 <- FALSE
      rv$button <- FALSE
    }
  })

}

shinyApp(ui, server)
0 голосов
/ 22 апреля 2020

Вы можете сделать

observeEvent(list(input$selectInput1, input$actionButton), {
    updateSelectInput(session = session, inputId = "input2", label = "b", choices = input$selectInput1, selected = input$selectInput1)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...