Hooks Personalizados
Hooks são uma ótima maneira de encapsular a lógica de negócio. Se nenhum dos hooks existentes funcionar para o seu problema, você pode escrever o seu próprio.
Hooks de Composição
Para evitar a repetição, você pode encapsular a lógica de negócios com base em hooks existentes para criar um novo gancho.
Por exemplo, se muitos componentes precisam acessar uma struct AppSettings
, você pode criar um gancho de "atalho":
#![allow(unused)] fn main() { fn use_settings(cx: &ScopeState) -> UseSharedState<AppSettings> { use_shared_state::<AppSettings>(cx).expect("App settings not provided") } }
Lógica de Hook Personalizada
Você pode usar cx.use_hook
para construir seus próprios hooks. Na verdade, é nisso que todos os hooks padrão são construídos!
use_hook
aceita um único encerramento para inicializar o hook. Ele será executado apenas na primeira vez que o componente for renderizado. O valor de retorno desse encerramento será usado como o valor do hook – o Dioxus o pegará e o armazenará enquanto o componente estiver vivo. Em cada renderização (não apenas na primeira!), você receberá uma referência a esse valor.
Nota: Você pode implementar
Drop
para o valor do seu hook – ele será descartado e o componente será desmontado (não mais na interface do usuário)
Dentro do encerramento de inicialização, você normalmente fará chamadas para outros métodos cx
. Por exemplo:
- O hook
use_state
rastreia o estado no valor do hook e usacx.schedule_update
para o Dioxus renderizar novamente o componente sempre que ele for alterado. - O hook
use_context
chamacx.consume_context
(que seria custoso chamar em cada render) para obter algum contexto do escopo