【问题标题】:Shiny renderText not reacting to change in reactiveValues闪亮的renderText对reactiveValues的变化没有反应
【发布时间】:2020-12-22 05:44:51
【问题描述】:

我的应用程序中有一个小而令人沮丧的问题。此对象 output$timeheader

我已尝试进行 reprex,但无法重现该错误。它按本示例中的预期工作。在我的应用程序中,对 user$stationtype 或 user$stationvar 的更改不会触发 output$timeheader

library(shiny)

ui <- tagList(
  navbarPage(
    title = "navbarPage", 
    tabPanel(
      title = "tabPanel",
      tags$div(
        absolutePanel(
          tabsetPanel(
            tabPanel(
              title = "title",
              tags$div(
                actionButton("changesel", "Choose a different variable"),
                textInput("map_marker_click", "Enter station name"),
                h4(strong(textOutput("timeheader")))
              )
            )
          )
        )
      )
    )
  )
)

server <- function(input, output, session){
  # collect inputs needed by model
  user <- reactiveValues(
    stationvar = NA,
    stationtype = NA
  )
  # observe changes in ui and pass to user$
  observe({
    input$changesel # observe button click
    ot <- runif(1)
    isolate({
      obsnut <- ifelse(ot > 0.6, "DIN", "NONE") # obs to use
      obsgroup <- ifelse(ot > 0.3, "Streams", "none")
      if (!setequal(obsnut, user$stationvar)){
        cat("user$stationvar <-", obsnut, "\n")
        user$stationvar <- obsnut
      }
      if (!setequal(obsgroup, user$stationtype)){
        cat("user$stationtype <-", obsgroup, "\n")
        user$stationtype <- obsgroup
      }
    }) # end isolate
  })
  # timeheader ####
  output$timeheader <- renderText({
    # req(user$stationtype, user$stationvar)
    # FIXME why doesn't this stupid text show!!! ####
    cat("Time series header:", user$stationtype, stationname(), user$stationvar, "\n")
    if (isTRUE(stationname() > "")){
      "Time series plot:"
    } else if (isTRUE(user$stationvar != "NONE")){
      "Enter station name to view data:"
    } else {
      ""
    }
  })
  ## click on marker to get stationname ####
  stationname <- reactive({
    req(isTRUE(user$stationvar != "NONE"))
    cat("Marker click\n")
    input$map_marker_click
  })
}

shinyApp(ui, server)

【问题讨论】:

  • 也许这会有所帮助:当 Shiny 行为异常时,我要做的第一件事是检查我是否没有创建 error to use twice the same output name,例如在两个选项卡中。
  • 谢谢,我检查了这个。实际上似乎 user$ 变量并没有失效,即使我知道它们正在改变。
  • 可能是因为 user$ 变量在 isolate 中更新,所以没有失效?
  • 它们确实在一个isolate()中被更新了,但是为什么这是一个问题呢?我认为隔离只会阻止对隔离内变量 read 的反应。但是作业应该仍然有效吗?
  • 这只是一个猜测,但正如您所做的测试所示,您可能是对的

标签: r shiny reactive-programming


【解决方案1】:

我的猜测是它与 stationame 反应性由于 req 为空有关。试试:

  stationname <- eventReactive(input$map_marker_click,{
    req(isTRUE(user$stationvar != "NONE"))
    cat("Marker click\n")
    input$map_marker_click
  }, ignoreNULL = F)

【讨论】:

  • 你是对的!当我更仔细地初始化站名时,它可以工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
相关资源
最近更新 更多