Antes de tudo, olhei o risco do uso de HTML
em um aplicativo shiny, mas pouco entendi sobre ele.
Considere este objeto de classe shiny.tag
:
tags$li(
class = "dropdown",
tags$a(
height = 40, href = "https://www.instagram.com/instagram",
title = "Instagram", target = "_blank",
tags$strong(
icon("instagram"), ""
)
)
)
E, rodando-a no Console, temos o seguinte HTML
:
<li class="dropdown">
<a style="height:40px" href="https://www.instagram.com.br" title="Instagram"
target="_blank">
<strong>
<i class="fas fa-instagram"></i>
</strong>
</a>
</li>
Elas seriam equivalentes, exceto pela classe. Na primeira, temos:
[1] "shiny.tag"
Enquanto que o código HTML
apresenta:
[1] "html" "character"
Eu tentei substituir o objeto de classe shiny.tag
por um HTML
dentro de da função shinydashboard::dashboardHeader()
como segue:
header <- dashboardHeader(
title = "Dashboard",
titleWidth = 300,
HTML(
'<li class="dropdown">
<a style="height:40px" href="https://www.google.com.br" title="Entre em contato"
target="_blank">
<strong>
<i class="fas fa-whatsapp"></i>
</strong>
</a>
</li>'
)
)
Mas, o seguinte erro aparece:
Error in FUN(X[[i]], …) : Expected an object with class ‘shiny.tag’.
Bom, sabe-se que as classes são diferentes, mas eu tenho outras funções no meu aplicativo, que consegui fazer a conversão para um HTML
onde continha este mesmo problema/ erro, mas, aqui no sidebarHeader
não está funcionando.
Pode parecer (ou talvez seja mesmo) uma “paranoia” minha - “Poxa, se funcionou com a shiny.tag
, pra que tentar converter para HTML
sabendo que seu uso é contraindicado?”.
Eu uso muito HTML
no meu app e, gostaria de obter como resposta (se possível):
-
Em quais contextos o uso de
HTML
pode ser prejuducial? -
Por que é indicado converter um código
HTML
emR
em um shinyApp, como por exemplo com uso do pacote html2R? -
Como fazer este o objeto de classe
HTML
funcionar dentro dosidebarHeader()
. Meu app para auxílio nesta questão:library(shiny) library(shinydashboard) header <- dashboardHeader( title = "Dashboard", titleWidth = 300, HTML( '<li class="dropdown"> <a style="height:40px" href="https://www.instagram.com.br" title="Instagram" target="_blank"> <strong> <i class="fas fa-instagram"></i> </strong> </a> </li>' ) ) sidebar <- dashboardSidebar( width = 300 ) body <- dashboardBody( uiOutput( outputId = "hour" ) ) ui <- dashboardPage( header = header, sidebar = sidebar, body = body ) server <- function(input, output) { } shinyApp(ui, server)