使用 if 语句将 reactiveValue 的值传递到 observeEvent 以在闪亮中创建条件选项卡
pass value of reactiveValue into observeEvent with if statement to create conditional tabs in shiny
我正在尝试在闪亮的应用程序中创建动态选项卡
当用户输入 api 令牌时,用于 api 调用以生成 table
如果 api 调用成功,我想显示选项卡 1 和 2
但是,如果 api 调用不成功或显示错误,我想隐藏选项卡 1 和 2
我在下面有一个基本的 reprex,它似乎不起作用。
如何将 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)
一些修改:
- 明确使用
id
参数 tabsetPanel
- 在
observeEvent
中修改vals
- 将
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)
我正在尝试在闪亮的应用程序中创建动态选项卡
当用户输入 api 令牌时,用于 api 调用以生成 table
如果 api 调用成功,我想显示选项卡 1 和 2
但是,如果 api 调用不成功或显示错误,我想隐藏选项卡 1 和 2
我在下面有一个基本的 reprex,它似乎不起作用。
如何将 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)
一些修改:
- 明确使用
id
参数tabsetPanel
- 在
observeEvent
中修改 - 将
vals$a
与""
进行比较而不是使用is.null
因为vals$a
在您的玩具示例中是一个字符串(您可以将nrow(df)>0
用于数据框)
vals
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)