Почему блестящее отображение сообщения проверки дважды? - PullRequest
0 голосов
/ 08 мая 2019

Как мы можем гарантировать, что пользователь увидит сообщение об ошибке проверки только один раз ?

Даже на странице проверки Shiny дважды отображалось сообщение об ошибке: https://shiny.rstudio.com/articles/validation.html

Кроме того, если бы я использовал другой язык, ссылка ниже могла бы помочь. Knockout - проверка показывает одно и то же сообщение об ошибке дважды

Хотя ** Stackoverflow имел здесь похожий вопрос, но имел в виду другую проблему ** Показывать сообщение об ошибке только один раз

Это означало что-то другое.

Я имею в виду сообщение «Пожалуйста, выберите набор данных», отображаемое дважды

library(shiny)

ui <- fluidPage(

    titlePanel("Validation App"),

    sidebarLayout(
        sidebarPanel(
            selectInput("data", label = "Data set",
                        choices = c("", "mtcars", "faithful", "iris"))
        ),

        # Show a plot of the generated distribution
        mainPanel(
            tableOutput("table"),
            plotOutput("plot")
        )
    )
)
server <- function(input, output) {

    data <- reactive({
        validate(
            need(input$data != "", "Please select a data set")
        )
        get(input$data, 'package:datasets')
    })

    output$plot <- renderPlot({
        hist(data()[, 1], col = 'forestgreen', border = 'white')
    })

    output$table <- renderTable({
        head(data())
    })

}
shinyApp(ui,server)

Если есть ошибка, в идеале только 1 раз, пользователь должен быть уведомлен, если это не раздражает.

1 Ответ

0 голосов
/ 08 мая 2019

Поскольку вы сохраняете сообщение «Пожалуйста, выберите набор данных» в реактивном объекте data(), а затем вызываете этот объект для отображения дважды, один раз в output$plot и один раз в output$table.

Один из способов реорганизовать приложение и при этом иметь аналогичный опыт - использовать заполнитель в виджете ввода, а затем req(), чтобы проверить, является ли введенное значение истинным .Если значение неверно («фальси»?), Тогда оценка останавливается, и вы не будете вызывать ошибки из выходных данных, использующих data().

library(shiny)

ui <- fluidPage(

  titlePanel("Validation App"),

  sidebarLayout(
    sidebarPanel(
      selectInput("data", label = "Data set",
                  choices = c("Please select a dataset" = "", "mtcars", "faithful", "iris"))
    ),

    # Show a plot of the generated distribution
    mainPanel(
      tableOutput("table"),
      plotOutput("plot")
    )
  )
)
server <- function(input, output) {

  data <- reactive({
    req(input$data)
    get(input$data, 'package:datasets')
  })

  output$plot <- renderPlot({
    hist(data()[, 1], col = 'forestgreen', border = 'white')
  })

  output$table <- renderTable({
    head(data())
  })

}
shinyApp(ui,server)

Другой вариант - переместить validate() логика от блока data() до одного из выходов.Таким образом, сообщение будет показано только один раз, но вам, возможно, придется выполнить еще одну проверку данных, поэтому я предпочитаю использовать req для подобных вещей.

...