代码之家  ›  专栏  ›  技术社区  ›  Simon Woodward

闪亮的renderText对反应值的更改不作出反应

  •  0
  • Simon Woodward  · 技术社区  · 5 年前

    我试着做了一个reprex,但我无法复制这个bug。它按照本例中的预期工作。在我的应用程序中,对用户$stationtype或用户$stationvar的更改不会触发输出$timeheader<-renderText()。

    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)
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   SmokeyShakers    5 年前

    stationame 由于 req . 尝试:

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