簡體   English   中英

使用 if 語句將 reactiveValue 的值傳遞給 observeEvent 以在 shiny 中創建條件選項卡

[英]pass value of reactiveValue into observeEvent with if statement to create conditional tabs in shiny

我正在嘗試在 shiny 應用程序中創建動態選項卡
當用戶輸入 api 令牌時,該令牌用於 api 調用以生成表

如果 api 調用成功,我想顯示標簽 1 和 2
但是,如果 api 調用不成功或顯示錯誤,我想隱藏選項卡 1 和 2

我在下面有一個基本的代表,這似乎不起作用。

如何將 reactiveVal 的值傳遞給 if 語句? 具體來說,如果 reactiveValue 尚不存在,我如何在 if 語句中檢查這一點? 某些版本的 validate(need()) 也許?

感謝您的幫助

library(shiny)



ui <- function() {
  fluidPage(
  tabsetPanel("mytabs", 
          type = "tabs", 
          
          tabPanel("home", 
                   
                   textInput("enterval", label = "enterval"
                             
                   )
          ), 
          tabPanel("tab1"), 
          tabPanel("tab2")
          
  )
)
}

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

  vals <- reactiveValues(

    a = NULL

  )

  vals$a <- eventReactive(input$enterval, {

# in reality, an api call creates an object (dataframe) when input$enterval is filled with a correct token
return(input$enterval)

  })

  observeEvent(input$enterval, {

if(is.null(vals$a()) # OR ERROR IS RETURNED FROM API CALL (vals$a) (possible to use validate(need()) here?)
   
   ) {
  
  hideTab(inputId = "mytabs", target = "tab1")
  hideTab(inputId = "mytabs", target = "tab2")
  
  
} else {
  
  showTab(inputId = "mytabs", target = "tab1")
  showTab(inputId = "mytabs", target = "tab2")
  
  
    }

  })

}

shinyApp(ui, server)

一些修改:

  1. 明確使用tabsetPanelid參數
  2. vals中修改observeEvent
  3. vals$a""進行比較,而不是使用is.null因為vals$a在您的玩具示例中是一個字符串(您可以將nrow(df)>0用於數據幀)
library(shiny)

ui <- function() {
  fluidPage(tabsetPanel(id = "mytabs",
                        type = "tabs",
                        tabPanel("home",textInput("enterval", label = "enterval")),
                        tabPanel("tab1"),
                        tabPanel("tab2"))
  )
}

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

  vals <- reactiveValues( a = NULL)

  observeEvent(input$enterval, {

    # in reality, an api call creates an object (dataframe) when input$enterval is filled with a correct token
    vals$a <- input$enterval

  })

  observeEvent(input$enterval, {

    if(vals$a =="" ) {

      hideTab(inputId = "mytabs", target = "tab1")
      hideTab(inputId = "mytabs", target = "tab2")

    } else {

      showTab(inputId = "mytabs", target = "tab1")
      showTab(inputId = "mytabs", target = "tab2")

    }

  })

}

shinyApp(ui, server)

在此處輸入圖像描述

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM