如何将 req() 与 shinyjs 切换功能一起使用到 enable/disable 元素?
How to use req() with shinyjs toggle functions to enable/disable elements?
如果至少输入了 1 个字符,下面的应用程序将正确地禁用该按钮,然后在输入 6 个或更多字符时启用它。但是,当没有给出任何字符时,该按钮将启用,因为 req(input$some_text) returns 一个静默错误。
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
textInput("some_text", "Write at least 5 characters to enable button",
value = ""),
actionButton("button", "A Button")
)
server <- function(input, output) {
first_step <- reactive({
req(input$some_text)
stringr::str_count(input$some_text, "[0-9]") > 5
})
observe({
toggleState("button", condition = first_step())
})
}
我明白 toggle() 在没有输入时没有任何作用。
在这种情况下,是否应该始终使用 if 子句?
first_step <- reactive({
if(input$some_text > 0){
stringr::str_count(input$some_text, "[0-9]") > 5
} else FALSE
})
试试这个,注意我在开头添加了disable
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
textInput("some_text", "Write at least 5 characters (numeric) to enable button",value = ""),
actionButton("button", "A Button")
)
server <- function(input, output) {
first_step <- eventReactive(input$some_text,{
disable("button")
req(input$some_text)
stringr::str_count(input$some_text, "[0-9]") >= 5
})
observeEvent(first_step(),{
toggleState("button", condition = first_step())
})
}
shinyApp(ui,server)
如果至少输入了 1 个字符,下面的应用程序将正确地禁用该按钮,然后在输入 6 个或更多字符时启用它。但是,当没有给出任何字符时,该按钮将启用,因为 req(input$some_text) returns 一个静默错误。
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
textInput("some_text", "Write at least 5 characters to enable button",
value = ""),
actionButton("button", "A Button")
)
server <- function(input, output) {
first_step <- reactive({
req(input$some_text)
stringr::str_count(input$some_text, "[0-9]") > 5
})
observe({
toggleState("button", condition = first_step())
})
}
我明白 toggle() 在没有输入时没有任何作用。 在这种情况下,是否应该始终使用 if 子句?
first_step <- reactive({
if(input$some_text > 0){
stringr::str_count(input$some_text, "[0-9]") > 5
} else FALSE
})
试试这个,注意我在开头添加了disable
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
textInput("some_text", "Write at least 5 characters (numeric) to enable button",value = ""),
actionButton("button", "A Button")
)
server <- function(input, output) {
first_step <- eventReactive(input$some_text,{
disable("button")
req(input$some_text)
stringr::str_count(input$some_text, "[0-9]") >= 5
})
observeEvent(first_step(),{
toggleState("button", condition = first_step())
})
}
shinyApp(ui,server)