如何将 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)