Кнопка подтверждения отображается после нажатия кнопки очистки - PullRequest
1 голос
/ 11 февраля 2020

В моем приложении ниже все работает хорошо, так как после выбора фильтра и отправки данные загружаются хорошо. Я нажимаю на кнопку очистки, и все данные удаляются.

Проблема в том, что если я снова нажму кнопку отправки, данные не загружаются. Может кто-нибудь помочь, пожалуйста?

---
title: "Untitled"
runtime: shiny
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
---

```{r setup, include=FALSE}
library(shiny)
library(shinydashboard)
library(shinycssloaders)
library(DT)
library(dplyr)
library(formattable)


Столбец {data-width = 650}

Диаграмма A

selectInput("Tic","",choices = c("",as.character(iris$Species)),selected = "")
actionButton("Submit","Submit")
actionButton("Clear","Clear")
tableOutput("table")


     data2 <- eventReactive(input$Submit,{
      if(input$Tic != ""){
      iris <- iris %>% filter(Species %in% input$Tic)
      }
        })


output$table <- renderTable({
  data2()
})

      observeEvent(input$Clear,{
      output$table <- renderTable({

})
      })

1 Ответ

1 голос
/ 11 февраля 2020

Таким образом, проблема в том, что когда вы нажимаете кнопку «очистить», которую вы устанавливаете

output$table <- renderTable({})

, и это заменяет существующее

output$table <- renderTable({data2()})

, это означает, что output$table больше не зависит от data2(), поэтому ничего не произойдет, когда data2 изменится. Вы навсегда изменили вывод, чтобы всегда показывать пустую таблицу.

Вместо того, чтобы изменять вывод, было бы лучше, если бы вы сделали data2 a reactiveVal(). Таким образом, вы можете вручную сбросить его значение. Например,

data2 <- reactiveVal()

observeEvent(input$Submit, {
  if (input$Tic != "") {
    data2(iris %>% filter(Species %in% input$Tic))
  }
})

observeEvent(input$Clear, {
  data2(NULL)
})

output$table <- renderTable({
  data2()
})

Таким образом, вместо eventReactive, data2 является reactiveVal, поэтому мы можем изменить его значение, когда мы observeEvent для отправки или очистки. Если у вас есть data2 <- eventReactive(input$Submit,{}), у вас нет другого способа изменить значение data2, когда происходит любое другое событие.

Вы можете получить больше примеров здесь: https://shiny.rstudio.com/articles/action-buttons.html (в частности, шаблоны 3 и 4)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...