(app: Component, props: P) -> VirtualDom {
#[test]
fn test_early_abort() {
const app: Component = |cx| {
- let val = cx.use_hook(|_| 0);
+ let val = cx.use_hook(|| 0);
*val += 1;
diff --git a/packages/dioxus/tests/lifecycle.rs b/packages/dioxus/tests/lifecycle.rs
index 6f85954ea..237938d36 100644
--- a/packages/dioxus/tests/lifecycle.rs
+++ b/packages/dioxus/tests/lifecycle.rs
@@ -34,7 +34,7 @@ fn manual_diffing() {
#[test]
fn events_generate() {
fn app(cx: Scope) -> Element {
- let count = cx.use_hook(|_| 0);
+ let count = cx.use_hook(|| 0);
let inner = match *count {
0 => {
@@ -77,7 +77,7 @@ fn events_generate() {
#[test]
fn components_generate() {
fn app(cx: Scope) -> Element {
- let render_phase = cx.use_hook(|_| 0);
+ let render_phase = cx.use_hook(|| 0);
*render_phase += 1;
cx.render(match *render_phase {
@@ -171,7 +171,7 @@ fn components_generate() {
#[test]
fn component_swap() {
fn app(cx: Scope) -> Element {
- let render_phase = cx.use_hook(|_| 0);
+ let render_phase = cx.use_hook(|| 0);
*render_phase += 1;
cx.render(match *render_phase {
diff --git a/packages/dioxus/tests/miri_stress.rs b/packages/dioxus/tests/miri_stress.rs
index 329e62f9b..c91c5a005 100644
--- a/packages/dioxus/tests/miri_stress.rs
+++ b/packages/dioxus/tests/miri_stress.rs
@@ -22,7 +22,7 @@ fn new_dom(app: Component, props: P) -> VirtualDom {
#[test]
fn test_memory_leak() {
fn app(cx: Scope) -> Element {
- let val = cx.use_hook(|_| 0);
+ let val = cx.use_hook(|| 0);
*val += 1;
@@ -30,7 +30,7 @@ fn test_memory_leak() {
return None;
}
- let name = cx.use_hook(|_| String::from("asd"));
+ let name = cx.use_hook(|| String::from("asd"));
cx.render(rsx!(
div { "Hello, world!" }
@@ -79,7 +79,7 @@ fn test_memory_leak() {
#[test]
fn memo_works_properly() {
fn app(cx: Scope) -> Element {
- let val = cx.use_hook(|_| 0);
+ let val = cx.use_hook(|| 0);
*val += 1;
@@ -87,7 +87,7 @@ fn memo_works_properly() {
return None;
}
- let name = cx.use_hook(|_| String::from("asd"));
+ let name = cx.use_hook(|| String::from("asd"));
cx.render(rsx!(
div { "Hello, world! {name}" }
@@ -192,7 +192,7 @@ fn free_works_on_root_hooks() {
}
fn app(cx: Scope) -> Element {
- let name = cx.use_hook(|_| Droppable(String::from("asd")));
+ let name = cx.use_hook(|| Droppable(String::from("asd")));
rsx!(cx, div { "{name.0}" })
}
@@ -204,7 +204,7 @@ fn free_works_on_root_hooks() {
fn old_props_arent_stale() {
fn app(cx: Scope) -> Element {
dbg!("rendering parent");
- let cnt = cx.use_hook(|_| 0);
+ let cnt = cx.use_hook(|| 0);
*cnt += 1;
if *cnt == 1 {
diff --git a/packages/dioxus/tests/sharedstate.rs b/packages/dioxus/tests/sharedstate.rs
index f3b6fabf3..85432ad4c 100644
--- a/packages/dioxus/tests/sharedstate.rs
+++ b/packages/dioxus/tests/sharedstate.rs
@@ -36,7 +36,7 @@ fn swap_test() {
struct MySharedState(&'static str);
fn app(cx: Scope) -> Element {
- let val = cx.use_hook(|_| 0);
+ let val = cx.use_hook(|| 0);
*val += 1;
cx.provide_context(Rc::new(MySharedState("world!")));
diff --git a/packages/fermi/src/hooks/atom_ref.rs b/packages/fermi/src/hooks/atom_ref.rs
index 14c98453d..fc7df59fc 100644
--- a/packages/fermi/src/hooks/atom_ref.rs
+++ b/packages/fermi/src/hooks/atom_ref.rs
@@ -16,7 +16,7 @@ use std::{
pub fn use_atom_ref(cx: &ScopeState, atom: AtomRef) -> &UseAtomRef {
let root = use_atom_root(cx);
- &cx.use_hook(|_| {
+ &cx.use_hook(|| {
root.initialize(atom);
(
UseAtomRef {
diff --git a/packages/fermi/src/hooks/atom_root.rs b/packages/fermi/src/hooks/atom_root.rs
index 72862a59f..f9eb07bc9 100644
--- a/packages/fermi/src/hooks/atom_root.rs
+++ b/packages/fermi/src/hooks/atom_root.rs
@@ -4,7 +4,7 @@ use std::rc::Rc;
// Returns the atom root, initiaizing it at the root of the app if it does not exist.
pub fn use_atom_root(cx: &ScopeState) -> &Rc {
- cx.use_hook(|_| match cx.consume_context::>() {
+ cx.use_hook(|| match cx.consume_context::>() {
Some(root) => root,
None => cx.provide_root_context(Rc::new(AtomRoot::new(cx.schedule_update_any()))),
})
diff --git a/packages/fermi/src/hooks/init_atom_root.rs b/packages/fermi/src/hooks/init_atom_root.rs
index 12fa3efca..db04d4e14 100644
--- a/packages/fermi/src/hooks/init_atom_root.rs
+++ b/packages/fermi/src/hooks/init_atom_root.rs
@@ -4,7 +4,7 @@ use std::rc::Rc;
// Initializes the atom root and retuns it;
pub fn use_init_atom_root(cx: &ScopeState) -> &Rc {
- cx.use_hook(|_| match cx.consume_context::>() {
+ cx.use_hook(|| match cx.consume_context::>() {
Some(ctx) => ctx,
None => cx.provide_context(Rc::new(AtomRoot::new(cx.schedule_update_any()))),
})
diff --git a/packages/fermi/src/hooks/read.rs b/packages/fermi/src/hooks/read.rs
index 9b66d7bc6..57a544e93 100644
--- a/packages/fermi/src/hooks/read.rs
+++ b/packages/fermi/src/hooks/read.rs
@@ -22,7 +22,7 @@ pub fn use_read_rc(cx: &ScopeState, f: impl Readable) -> &Rc {
}
}
- let inner = cx.use_hook(|_| UseReadInner {
+ let inner = cx.use_hook(|| UseReadInner {
value: None,
root: root.clone(),
scope_id: cx.scope_id(),
diff --git a/packages/fermi/src/hooks/set.rs b/packages/fermi/src/hooks/set.rs
index fa1db9129..5e5141227 100644
--- a/packages/fermi/src/hooks/set.rs
+++ b/packages/fermi/src/hooks/set.rs
@@ -4,7 +4,7 @@ use std::rc::Rc;
pub fn use_set(cx: &ScopeState, f: impl Writable) -> &Rc {
let root = use_atom_root(cx);
- cx.use_hook(|_| {
+ cx.use_hook(|| {
let id = f.unique_id();
let root = root.clone();
root.initialize(f);
diff --git a/packages/fermi/src/hooks/state.rs b/packages/fermi/src/hooks/state.rs
index 41e4e8ab0..c75446bbe 100644
--- a/packages/fermi/src/hooks/state.rs
+++ b/packages/fermi/src/hooks/state.rs
@@ -33,7 +33,7 @@ use std::{
pub fn use_atom_state(cx: &ScopeState, f: impl Writable) -> &AtomState {
let root = crate::use_atom_root(cx);
- let inner = cx.use_hook(|_| AtomState {
+ let inner = cx.use_hook(|| AtomState {
value: None,
root: root.clone(),
scope_id: cx.scope_id(),
diff --git a/packages/hooks/src/use_shared_state.rs b/packages/hooks/src/use_shared_state.rs
index 2d9f9eb60..9c4048b0e 100644
--- a/packages/hooks/src/use_shared_state.rs
+++ b/packages/hooks/src/use_shared_state.rs
@@ -61,7 +61,7 @@ impl ProvidedStateInner {
///
///
pub fn use_context(cx: &ScopeState) -> Option> {
- let state = cx.use_hook(|_| {
+ let state = cx.use_hook(|| {
let scope_id = cx.scope_id();
let root = cx.consume_context::>();
@@ -173,7 +173,7 @@ where
///
///
pub fn use_context_provider(cx: &ScopeState, f: impl FnOnce() -> T) {
- cx.use_hook(|_| {
+ cx.use_hook(|| {
let state: ProvidedState = Rc::new(RefCell::new(ProvidedStateInner {
value: Rc::new(RefCell::new(f())),
notify_any: cx.schedule_update_any(),
diff --git a/packages/hooks/src/usecoroutine.rs b/packages/hooks/src/usecoroutine.rs
index 65a3ff52d..503c0e91a 100644
--- a/packages/hooks/src/usecoroutine.rs
+++ b/packages/hooks/src/usecoroutine.rs
@@ -65,7 +65,7 @@ where
G: FnOnce(UnboundedReceiver) -> F,
F: Future
+
+
+
+
+
+
+
+> 💡 Este é um documento traduzido voluntariamente. Se você viu erros de tradução e/ou erros de digitação, entre em contato: [@amindWalker](https://github.com/amindWalker), [GMail](bhrochamail@gmail.com) ou **_melhor ainda, envie um PR_**.
+
+
+
+**Dioxus** é um framework ergonômico para construir interfaces de forma portátil, rápida, escalável e robusta com a linguagem de programação Rust.
+
+```rust
+fn app(cx: Scope) -> Element {
+ let mut count = use_state(&cx, || 0);
+
+ cx.render(rsx! {
+ h1 { "High-Five counter: {count}" }
+ button { onclick: move |_| count += 1, "Up high!" }
+ button { onclick: move |_| count -= 1, "Down low!" }
+ })
+}
+```
+
+O Dioxus pode ser usado para desenvolver aplicativos Web, Desktop, sites estáticos, TUI, LiveView e mais. O Dioxus é inteiramente agnóstico de renderizador e pode ser usado como uma plataforma para qualquer renderizador.
+
+Se você conhece React, então você já conhece o Dioxus.
+
+### Funções Únicas:
+
+- Aplicativos Desktop rodam nativamente (sem ElectronJS!) em menos de 10 linhas de código.
+- Incrivelmente ergonômico e um poderoso gerenciador de estados.
+- Documentação compreensiva - guias e explicações ao apontar o mouse para todos os elementos HTML e eventos.
+- Extremamente eficiente em memória - 0 alocações globais para componentes com estado-estável.
+- Agendamento assíncrono de canais-múltiplos para suporte de `async` de primera-classe.
+- E mais! Leia as [publicações de lançamento](https://dioxuslabs.com/blog/introducing-dioxus/).
+
+## Começando com...
+
+
+
+## Projetos de Exemplo:
+
+| Navegador de Arquivos (Desktop) | WiFi Scanner (Desktop) | TodoMVC (Todas as Plataformas) | E-commerce com Tailwind (SSR/LiveView) |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [![Explorador de Arquivos](https://github.com/DioxusLabs/example-projects/raw/master/file-explorer/image.png)](https://github.com/DioxusLabs/example-projects/blob/master/file-explorer) | [![Wifi Scanner Demo](https://github.com/DioxusLabs/example-projects/raw/master/wifi-scanner/demo_small.png)](https://github.com/DioxusLabs/example-projects/blob/master/wifi-scanner) | [![TodoMVC example](https://github.com/DioxusLabs/example-projects/raw/master/todomvc/example.png)](https://github.com/DioxusLabs/example-projects/blob/master/todomvc) | [![Exemplo de E-commerce](https://github.com/DioxusLabs/example-projects/raw/master/ecommerce-site/demo.png)](https://github.com/DioxusLabs/example-projects/blob/master/ecommerce-site) |
+
+Veja a página [awesome-dioxus](https://github.com/DioxusLabs/awesome-dioxus) para uma lista curada do conteúdo dentro do ecossistema do Dioxus.
+
+## Porquê o Dioxus e porquê o Rust?
+
+TypeScript é uma adição fantástica ao JavaScript, mas ainda é fundamentalmente JavaScript. TS executa ligeiramente mais devagar, tem várias opções de configurações diferentes e nem todos os pacotes estão propriamente tipados.
+
+Apenas por usar o Rust, nós ganhamos:
+
+- Tipos estáticos para _todas_ as bibliotecas por padrão
+- Imutabilidade por padrão
+- Um sistema de módulos simples e intuitivo
+- Documentação integrada na própria linguagem (`go to source` _de fato vai até a fonte_)
+- Padrões de combinação avançados
+- Iteradores limpos, eficientes e combináveis
+- Testes de Unidade/Integração em linha integrados à linguagem
+- O melhor da classe em Tratamento de Erros
+- Biblioteca padrão poderosa e sensata
+- Sistema de macros flexível
+- Acesso ao `crates.io`
+
+Especificamente, o Dioxus providencia para nós muitas outras garantias:
+
+- Estrutura de Dados imutável apropriada
+- Garantias para Tratamento de Erros (assim você pode dormir em paz à noite sem se preocupar com erros do tipo `undefined`)
+- Desempenho móvel nativo
+- Acesso direto ao sistema de Entrada/Saída (IO)
+
+E muito mais. Dioxus faz com que aplicativos em Rust sejam rápidos de escrever como os de React, mas permite mais robustez dando ao sua equipe frontend mais confiança em desenvolver grandes mudanças em pouco tempo.
+
+## Porquê não o Dioxus?
+
+Você não deve usar o Dioxus se:
+
+- Você não gosta da metodologia do React Hooks para o frontend
+- Você precisa de um renderizador personalizado
+- Você quer suporte para navegadores que não tenham suporte ao WASM ou asm.js
+- Você precisa de uma solução `Send` + `Sync` (o Dioxus ainda não é `thread-safe`)
+
+## Comparação com outras frameworks de UI em Rust:
+
+Dioxus primeiramente enfatiza a **experiência do desenvolvedor** e a **familiaridade com os princípios do React**.
+
+- [Yew](https://github.com/yewstack/yew): prefere o padrão `elm`, não há `props` emprestadas, suporta SSR (sem `hydration`), sem suporte direto para Desktop/Móvel.
+- [Percy](https://github.com/chinedufn/percy): suporta SSR, mas com menos ênfase em gerenciamento de estado e tratamento de eventos.
+- [Sycamore](https://github.com/sycamore-rs/sycamore): sem `VirtualDOM` usando controle preciso de reatividade, mas sem suporte direto à aplicativos Desktop/Móvel.
+- [Dominator](https://github.com/Pauan/rust-dominator): alternativa zero-custo baseada em sinais, menos ênfase em comunidade e documentação.
+- [Azul](https://azul.rs): renderizador HTML/CSS totalmente nativo para aplicações Desktop, sem suporte para Web/SSR.
+
+## Paridade com React e Progresso
+
+Dioxus é fortemente inspirado pelo React, mas nós queremos que sua transição pareça como um aprimoramento. Dioxus está _quase_ lá, mas ainda faltam alguma funções chave. Isto inclui:
+
+- Portais
+- Suspensão integrada ao SSR
+- Componentes de Servidor / Segmentador de Pacotes / Execução Tardia (Lazy)
+
+Dioxus é único no ecossistema do Rust por suportar:
+
+- Componentes com propriedade que são emprestadas dos seus parentes
+- SSR com `hydration` feito pelo Cliente
+- Suporte à aplicação Desktop
+
+Para mais informações sobre quais funções estão atualmente disponíveis e para o progresso futuro, veja [O Guia](https://dioxuslabs.com/guide/).
+
+## Projeto dentro do ecossistema Dioxus
+
+Quer adentrar e ajudar a construir o futuro do frontend em Rust? Há um vasto número de lugares em que você pode contribuir e fazer uma grande diferença:
+
+- [TUI renderer](https://github.com/dioxusLabs/rink)
+- [Ferramentas CLI](https://github.com/dioxusLabs/cli)
+- [Documentação e Exemplos de Projeto](https://github.com/dioxusLabs/docsite)
+- LiveView e Servidor Web
+- Sistema de Componentes prontos
+
+## Licença
+
+Este projeto é licenciado sob a licença MIT.
+
+[licença mit]: https://github.com/DioxusLabs/dioxus/blob/master/LICENSE-MIT
+
+### Contribuições
+
+A menos que você explicitamente ateste o contrário, qualquer contribuição feita ao Dioxus por você será licenciada de acordo com a licença MIT sem nenhum outro termo ou condição.