Запускать даже Реактивно при нажатии на меню navbarPage - PullRequest
0 голосов
/ 04 августа 2020

Я хочу преобразовать имя панели NavbarPage tabPanel (меню itme вверху страницы) в виджет Shiny, то есть в actionButton. Если пользователь нажимает на tabPanel 'Render_Text', должно срабатывать eventReactive. Также пользователь переходит на страницу tabPanle (как обычно). В основном хочу, чтобы Render_Text действовал как кнопка. Приведенный ниже фрагмент кода не работает.

ui <- navbarPage("Hello World",
      tabPanel("About",
              textInput("Text1","Enter text:")
      ),
      tabPanel("Render_Text", value = "RS1",
              textOutput("Out_text1")
      )
)
server <- function(input,output,server){
          Out_text <- eventReactive(input$RS1,{input$Text1 })
                      output$Out_text1 <- renderText({Out_text()})
}
shinyApp(ui=ui, server=server)

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Как сказал thmschk , рендеринг все равно будет вызван, когда вы нажмете на панель навигации. Однако с navbarPage действительно связан id, и вы можете видеть, что нажимается, слушая это:

library(shiny)

ui <- navbarPage("Hello World",id = "RS1",
                 tabPanel("About",
                          textInput("Text1","Enter text:")
                 ),
                 tabPanel("Render_Text",
                          textOutput("Out_text1")
                 )
)

server <- function(input,output,server){

    Out_text <- eventReactive(input$RS1,{
        if(input$RS1 == "Render_Text"){
            input$Text1
        }else{
            return()
        }
    })
    
    output$Out_text1 <- renderText({
        Out_text()
    })
    
}

shinyApp(ui, server)
0 голосов
/ 04 августа 2020

По сути, shiny всегда отображает вывод после срабатывания определенного ввода (например, eventReactivce или ObservationEvent) или когда это необходимо. В вашем случае это означает, что ваш textInput всегда будет отображаться, когда вы нажимаете соответствующую tabPanel:

ui <- navbarPage("Hello World",
                 tabPanel("About",textInput("Text1","Enter text:")
                 ),
                 tabPanel("Render_Text",textOutput("Out_text1")
                 )
)

server <- function(input,output,server){

    output$Out_text1 <- renderText({input$Text1})

    }

Если я правильно понимаю ваши требования, вам вообще не нужен actionButton. Дайте мне знать, если я вас неправильно понял.

ОБНОВЛЕНИЕ

Может вы имеете в виду что-то вроде этого:

ui <- navbarPage("Hello World",id = "navbar",
                 tabPanel("About",value = "text",
                          textInput("Text1","Enter text:")
                 ),
                 tabPanel("Render_Text", value = "RS1",
                          textOutput("Out_text1")
                 )
)
server <- function(input,output,server){
    
    Out_text <- reactive({
        
        if (input$navbar == "RS1") {
            
            input$Text1
            
            }
        
        })
   
    output$Out_text1 <- renderText({
        
        Out_text()
        
        })

    }
...