[英]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)
一些修改:
tabsetPanel
的id
參數vals
中修改observeEvent
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.