Как выделить элемент реактивного списка в блестящем? - PullRequest
0 голосов
/ 09 ноября 2019

Допустим, у меня есть следующее тестовое приложение ниже. То, что я ищу, - это как воспроизвести функциональность решения reactiveValues. Если вы поиграете с приложением, вы заметите одно отличие в том, как isolate влияет на функциональность. С реактивными значениями я могу выбрать элементы в реактивном списке для изоляции.

Поэтому, если пользователь нажимает кнопку 1, время всегда будет меняться. Так что время всегда будет печататься в наблюдении. Если пользователь нажимает ту же кнопку, поскольку data не меняется, отображается только время. Если вы переключаете щелчки между кнопками, будет отображаться как имя кнопки, так и время.

Похоже, что вы не можете повторить эту функцию, используя reactive. Моя проблема связана с реальным сценарием, который я использую reactivePoll. Мой response.Poll возвращает список myData скажем. Что я хочу сделать, так это иметь возможность isolate только тогда, когда myData$firstel изменится. Но похоже, что любая реактивная парадигма, которая обновляется с myData, будет обновляться независимо от того, изменяется myData$firstel или myData$secondel. Есть ли способ решить это? Я попытался преобразовать свой реактивный_полл в реактивные значения, но он не работает

library(shiny)

ui <- fluidPage(
  actionButton("button1","Button 1"),
  actionButton("button2","Button 2"),
  textOutput("output1"),
  textOutput("output2")
)

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

  myreactval <- reactiveValues(data = NULL, selection = NULL)

  observeEvent(input$button1,{
    myreactval$data <- Sys.time()
    myreactval$selection <- "button1"
  })
  observeEvent(input$button2,{
    myreactval$data <- Sys.time()
    myreactval$selection <- "button2"
  })


  myreact <- eventReactive(input$button1,{
    res <- list()
    res$data <- Sys.time()
    res$selection <- "button1"
    return(res)
  })


  output$output1 <- renderText({ myreact()$data })
  output$output2 <- renderText({ myreact()$selection })

  # REACTIVE SOLUTION
  # observe({
  #   print(myreact()$selection)
  # })
  # observe({
  #   print(isolate(myreact())$data)
  # })

  # REACTIVE VALUES SOLUTION
  observe({
    print(myreactval$selection)
  })
  observe({
    print(isolate(myreactval)$data)
  })
}

shinyApp(ui,server)
...