Atributos Especiais

Enquanto a maioria dos atributos são simplesmente passados para o HTML, alguns têm comportamentos especiais.

A Escotilha de Escape do HTML

Se você estiver trabalhando com itens pré-renderizados, modelos ou uma biblioteca JS, convém passar o HTML diretamente em vez de passar pelo Dioxus. Nesses casos, use dangerous_inner_html.

Por exemplo, enviar um conversor de markdown para Dioxus pode aumentar significativamente o tamanho final do aplicativo. Em vez disso, você desejará pré-renderizar sua remarcação para HTML e, em seguida, incluir o HTML diretamente em sua saída. Usamos essa abordagem para a página inicial do Dioxus:


#![allow(unused)]
fn main() {
// this should come from a trusted source
let contents = "live <b>dangerously</b>";

cx.render(rsx! {
    div {
        dangerous_inner_html: "{contents}",
    }
})
}

Nota! Esse atributo é chamado de "dangerous_inner_html" porque é perigoso passar dados que você não confia. Se você não for cuidadoso, poderá facilmente expor ataques de cross-site scripting (XSS) aos seus usuários.

Se você estiver lidando com entradas não confiáveis, certifique-se de higienizar seu HTML antes de passá-lo para dangerous_inner_html – ou apenas passe-o para um elemento de texto para escapar de qualquer tag HTML.

Atributos Booleanos

A maioria dos atributos, quando renderizados, serão renderizados exatamente como a entrada que você forneceu. No entanto, alguns atributos são considerados atributos "booleanos" e apenas sua presença determina se eles afetam a saída. Para esses atributos, um valor fornecido de "false" fará com que eles sejam removidos do elemento de destino.

Portanto, este RSX não renderizaria o atributo hidden:


#![allow(unused)]
fn main() {
cx.render(rsx! {
    div {
        hidden: "false",
        "hello"
    }
})
}
<div>hello</div>

No entanto, nem todos os atributos funcionam assim. Apenas os seguintes atributos têm este comportamento:

  • allowfullscreen
  • allowpaymentrequest
  • async
  • autofocus
  • autoplay
  • checked
  • controls
  • default
  • defer
  • disabled
  • formnovalidate
  • hidden
  • ismap
  • itemscope
  • loop
  • multiple
  • muted
  • nomodule
  • novalidate
  • open
  • playsinline
  • readonly
  • required
  • reversed
  • selected
  • truespeed

Para quaisquer outros atributos, um valor de "false" será enviado diretamente para o DOM.