diff --git a/.vscode/spellright.dict b/.vscode/spellright.dict index f30a19dfe..436b431e2 100644 --- a/.vscode/spellright.dict +++ b/.vscode/spellright.dict @@ -60,3 +60,4 @@ wasm 7ns attr derefed +Tokio diff --git a/docs/main-concepts/12-signals.md b/docs/main-concepts/12-signals.md index 0ad05916f..d9c4fcf83 100644 --- a/docs/main-concepts/12-signals.md +++ b/docs/main-concepts/12-signals.md @@ -12,7 +12,7 @@ Your component today might look something like this: ```rust fn Comp(cx: Context<()>) -> VNode { - let (title, set_title) = use_state(&cx, || "Title".to_string()); + let (title, set_title) = use_state(cx, || "Title".to_string()); cx.render(rsx!{ input { value: title, @@ -26,7 +26,7 @@ This component is fairly straightforward - the input updates its own value on ev ```rust fn Comp(cx: Context<()>) -> VNode { - let (title, set_title) = use_state(&cx, || "Title".to_string()); + let (title, set_title) = use_state(cx, || "Title".to_string()); cx.render(rsx!{ div { input { diff --git a/packages/web/examples/anim.rs b/examples/_examples/anim.rs similarity index 100% rename from packages/web/examples/anim.rs rename to examples/_examples/anim.rs diff --git a/packages/web/examples/basic.rs b/examples/_examples/basic.rs similarity index 96% rename from packages/web/examples/basic.rs rename to examples/_examples/basic.rs index 6c0677673..70a6fa112 100644 --- a/packages/web/examples/basic.rs +++ b/examples/_examples/basic.rs @@ -16,7 +16,7 @@ fn main() { } static App: FC<()> = |cx| { - let (state, set_state) = use_state_classic(&cx, || 0); + let (state, set_state) = use_state_classic(cx, || 0); cx.render(rsx! { div { section { class: "py-12 px-4 text-center" diff --git a/packages/web/examples/calculator.rs b/examples/_examples/calculator.rs similarity index 96% rename from packages/web/examples/calculator.rs rename to examples/_examples/calculator.rs index e0e861264..153c2cf3e 100644 --- a/packages/web/examples/calculator.rs +++ b/examples/_examples/calculator.rs @@ -28,9 +28,9 @@ enum Operator { } static App: FC<()> = |cx| { - let (cur_val, set_cur_val) = use_state_classic(&cx, || 0.0_f64); - let (operator, set_operator) = use_state_classic(&cx, || None as Option); - let (display_value, set_display_value) = use_state_classic(&cx, || "0".to_string()); + let (cur_val, set_cur_val) = use_state_classic(cx, || 0.0_f64); + let (operator, set_operator) = use_state_classic(cx, || None as Option); + let (display_value, set_display_value) = use_state_classic(cx, || "0".to_string()); let clear_display = display_value.eq("0"); let clear_text = if clear_display { "C" } else { "AC" }; diff --git a/packages/web/examples/children.rs b/examples/_examples/children.rs similarity index 100% rename from packages/web/examples/children.rs rename to examples/_examples/children.rs diff --git a/packages/web/examples/context.rs b/examples/_examples/context.rs similarity index 100% rename from packages/web/examples/context.rs rename to examples/_examples/context.rs diff --git a/packages/web/examples/deep.rs b/examples/_examples/deep.rs similarity index 95% rename from packages/web/examples/deep.rs rename to examples/_examples/deep.rs index 46f3bbab5..e3d97d656 100644 --- a/packages/web/examples/deep.rs +++ b/examples/_examples/deep.rs @@ -12,7 +12,7 @@ fn main() { } fn CustomA(cx: Context<()>) -> VNode { - let (val, set_val) = use_state_classic(&cx, || "abcdef".to_string() as String); + let (val, set_val) = use_state_classic(cx, || "abcdef".to_string() as String); cx.render(rsx! { div { diff --git a/packages/web/examples/demo2.rs b/examples/_examples/demo2.rs similarity index 100% rename from packages/web/examples/demo2.rs rename to examples/_examples/demo2.rs diff --git a/packages/web/examples/demoday.rs b/examples/_examples/demoday.rs similarity index 100% rename from packages/web/examples/demoday.rs rename to examples/_examples/demoday.rs diff --git a/packages/web/examples/derive.rs b/examples/_examples/derive.rs similarity index 97% rename from packages/web/examples/derive.rs rename to examples/_examples/derive.rs index d7dcaf792..9d2b52e8c 100644 --- a/packages/web/examples/derive.rs +++ b/examples/_examples/derive.rs @@ -10,7 +10,7 @@ fn main() { } fn App(cx: Context<()>) -> VNode { - let cansee = use_state(&cx, || false); + let cansee = use_state(cx, || false); rsx! { in cx, div { "Shadow of the child:" diff --git a/packages/web/examples/events.rs b/examples/_examples/events.rs similarity index 100% rename from packages/web/examples/events.rs rename to examples/_examples/events.rs diff --git a/packages/web/examples/fragment.rs b/examples/_examples/fragment.rs similarity index 100% rename from packages/web/examples/fragment.rs rename to examples/_examples/fragment.rs diff --git a/packages/web/examples/framework_benchmark.rs b/examples/_examples/framework_benchmark.rs similarity index 97% rename from packages/web/examples/framework_benchmark.rs rename to examples/_examples/framework_benchmark.rs index 5f31832cc..018ce878a 100644 --- a/packages/web/examples/framework_benchmark.rs +++ b/examples/_examples/framework_benchmark.rs @@ -28,8 +28,8 @@ type RowList = im_rc::HashMap, FxBuildHasher>; // type RowList = im_rc::HashMap, nohash_hasher::BuildNoHashHasher>; static App: FC<()> = |cx| { - let (items, set_items) = use_state_classic(&cx, || RowList::default()); - let (selection, set_selection) = use_state_classic(&cx, || None as Option); + let (items, set_items) = use_state_classic(cx, || RowList::default()); + let (selection, set_selection) = use_state_classic(cx, || None as Option); let create_rendered_rows = move |from, num| move |_| set_items(create_row_list(from, num)); diff --git a/packages/web/examples/hello.rs b/examples/_examples/hello.rs similarity index 100% rename from packages/web/examples/hello.rs rename to examples/_examples/hello.rs diff --git a/packages/web/examples/helloworld.rs b/examples/_examples/helloworld.rs similarity index 100% rename from packages/web/examples/helloworld.rs rename to examples/_examples/helloworld.rs diff --git a/packages/web/examples/htmlexample.html b/examples/_examples/htmlexample.html similarity index 100% rename from packages/web/examples/htmlexample.html rename to examples/_examples/htmlexample.html diff --git a/packages/web/examples/infer.rs b/examples/_examples/infer.rs similarity index 95% rename from packages/web/examples/infer.rs rename to examples/_examples/infer.rs index cce0a3533..45d78f64d 100644 --- a/packages/web/examples/infer.rs +++ b/examples/_examples/infer.rs @@ -15,7 +15,7 @@ fn main() { // this is a component static Example: FC<()> = |cx| { - let (event, set_event) = use_state_classic(&cx, || None); + let (event, set_event) = use_state_classic(cx, || None); let handler = move |evt| { set_event(Some(evt)); diff --git a/packages/web/examples/input.rs b/examples/_examples/input.rs similarity index 93% rename from packages/web/examples/input.rs rename to examples/_examples/input.rs index e7ac45211..29ba23406 100644 --- a/packages/web/examples/input.rs +++ b/examples/_examples/input.rs @@ -13,7 +13,7 @@ fn main() { } static App: FC<()> = |cx| { - let (val, set_val) = use_state_classic(&cx, || "asd".to_string()); + let (val, set_val) = use_state_classic(cx, || "asd".to_string()); cx.render(rsx! { div { class: "max-w-lg max-w-xs bg-blue-800 shadow-2xl rounded-lg mx-auto text-center py-12 mt-4 rounded-xl" @@ -51,7 +51,7 @@ static Example: FC<()> = |cx| { }; static UserInput: FC<()> = |cx| { - let (val, set_val) = use_state_classic(&cx, || "asd".to_string()); + let (val, set_val) = use_state_classic(cx, || "asd".to_string()); rsx! { in cx, div { class: "mb-4" diff --git a/packages/web/examples/jackjill.rs b/examples/_examples/jackjill.rs similarity index 96% rename from packages/web/examples/jackjill.rs rename to examples/_examples/jackjill.rs index 436f245f5..240c287f7 100644 --- a/packages/web/examples/jackjill.rs +++ b/examples/_examples/jackjill.rs @@ -10,7 +10,7 @@ fn main() { } static Example: FC<()> = |cx| { - let (name, set_name) = use_state_classic(&cx, || "...?"); + let (name, set_name) = use_state_classic(cx, || "...?"); log::debug!("Running component...."); diff --git a/packages/web/examples/jackjillrsx.rs b/examples/_examples/jackjillrsx.rs similarity index 95% rename from packages/web/examples/jackjillrsx.rs rename to examples/_examples/jackjillrsx.rs index 0b39f0f02..7974a0bf2 100644 --- a/packages/web/examples/jackjillrsx.rs +++ b/examples/_examples/jackjillrsx.rs @@ -10,7 +10,7 @@ fn main() { } static Example: FC<()> = |cx| { - let (name, set_name) = use_state_classic(&cx, || "...?"); + let (name, set_name) = use_state_classic(cx, || "...?"); cx.render(rsx! { section { class: "py-12 px-4 text-center" div { class: "w-full max-w-2xl mx-auto" diff --git a/packages/web/examples/landingpage.rs b/examples/_examples/landingpage.rs similarity index 95% rename from packages/web/examples/landingpage.rs rename to examples/_examples/landingpage.rs index 3fd082edc..b4be2626b 100644 --- a/packages/web/examples/landingpage.rs +++ b/examples/_examples/landingpage.rs @@ -15,7 +15,7 @@ fn main() { } static App: FC<()> = |cx| { - let (contents, set_contents) = use_state_classic(&cx, || "asd"); + let (contents, set_contents) = use_state_classic(cx, || "asd"); cx.render(rsx! { div { diff --git a/packages/web/examples/landingpage2.rs b/examples/_examples/landingpage2.rs similarity index 95% rename from packages/web/examples/landingpage2.rs rename to examples/_examples/landingpage2.rs index 64ce1b96d..a2f8b8817 100644 --- a/packages/web/examples/landingpage2.rs +++ b/examples/_examples/landingpage2.rs @@ -14,7 +14,7 @@ fn main() { } static App: FC<()> = |cx| { - let (contents, set_contents) = use_state_classic(&cx, || "asd"); + let (contents, set_contents) = use_state_classic(cx, || "asd"); cx.render(rsx! { div { class: "flex items-center justify-center flex-col" diff --git a/packages/web/examples/list.rs b/examples/_examples/list.rs similarity index 96% rename from packages/web/examples/list.rs rename to examples/_examples/list.rs index 6f7f7301e..66b965706 100644 --- a/packages/web/examples/list.rs +++ b/examples/_examples/list.rs @@ -27,9 +27,9 @@ pub struct TodoItem { } static App: FC<()> = |cx| { - let (draft, set_draft) = use_state_classic(&cx, || "".to_string()); - let (filter, set_filter) = use_state_classic(&cx, || FilterState::All); - let todos = use_state(&cx, || BTreeMap::::new()); + let (draft, set_draft) = use_state_classic(cx, || "".to_string()); + let (filter, set_filter) = use_state_classic(cx, || FilterState::All); + let todos = use_state(cx, || BTreeMap::::new()); cx.render(rsx!( div { id: "app" diff --git a/packages/web/examples/listy.rs b/examples/_examples/listy.rs similarity index 100% rename from packages/web/examples/listy.rs rename to examples/_examples/listy.rs diff --git a/packages/web/examples/many.rs b/examples/_examples/many.rs similarity index 100% rename from packages/web/examples/many.rs rename to examples/_examples/many.rs diff --git a/packages/web/examples/model.rs b/examples/_examples/model.rs similarity index 100% rename from packages/web/examples/model.rs rename to examples/_examples/model.rs diff --git a/packages/web/examples/props.rs b/examples/_examples/props.rs similarity index 100% rename from packages/web/examples/props.rs rename to examples/_examples/props.rs diff --git a/packages/web/examples/query.rs b/examples/_examples/query.rs similarity index 100% rename from packages/web/examples/query.rs rename to examples/_examples/query.rs diff --git a/packages/web/examples/rsxt.rs b/examples/_examples/rsxt.rs similarity index 97% rename from packages/web/examples/rsxt.rs rename to examples/_examples/rsxt.rs index 32a15f39f..6aae358b4 100644 --- a/packages/web/examples/rsxt.rs +++ b/examples/_examples/rsxt.rs @@ -28,7 +28,7 @@ struct ExampleProps { } static Example: FC = |cx| { - let name = use_state(&cx, move || cx.initial_name); + let name = use_state(cx, move || cx.initial_name); cx.render(rsx! { div { diff --git a/packages/web/examples/todomvc-nodeps.rs b/examples/_examples/todomvc-nodeps.rs similarity index 91% rename from packages/web/examples/todomvc-nodeps.rs rename to examples/_examples/todomvc-nodeps.rs index cdf4bb29e..60d2d9bca 100644 --- a/packages/web/examples/todomvc-nodeps.rs +++ b/examples/_examples/todomvc-nodeps.rs @@ -26,9 +26,9 @@ pub struct TodoItem { } pub fn App(cx: Context<()>) -> VNode { - let (draft, set_draft) = use_state_classic(&cx, || "".to_string()); - let (todos, set_todos) = use_state_classic(&cx, || HashMap::>::new()); - let (filter, set_filter) = use_state_classic(&cx, || FilterState::All); + let (draft, set_draft) = use_state_classic(cx, || "".to_string()); + let (todos, set_todos) = use_state_classic(cx, || HashMap::>::new()); + let (filter, set_filter) = use_state_classic(cx, || FilterState::All); let filtered_todos = todos.iter().filter(move |(id, item)| match filter { FilterState::All => true, @@ -100,7 +100,7 @@ pub struct TodoEntryProps { } pub fn TodoEntry(cx: Context) -> VNode { - let (is_editing, set_is_editing) = use_state_classic(&cx, || false); + let (is_editing, set_is_editing) = use_state_classic(cx, || false); let contents = ""; let todo = TodoItem { checked: false, diff --git a/packages/web/examples/todomvc/filtertoggles.rs b/examples/_examples/todomvc/filtertoggles.rs similarity index 100% rename from packages/web/examples/todomvc/filtertoggles.rs rename to examples/_examples/todomvc/filtertoggles.rs diff --git a/packages/web/examples/todomvc/main.rs b/examples/_examples/todomvc/main.rs similarity index 100% rename from packages/web/examples/todomvc/main.rs rename to examples/_examples/todomvc/main.rs diff --git a/packages/web/examples/todomvc/recoil.rs b/examples/_examples/todomvc/recoil.rs similarity index 100% rename from packages/web/examples/todomvc/recoil.rs rename to examples/_examples/todomvc/recoil.rs diff --git a/packages/web/examples/todomvc/state.rs b/examples/_examples/todomvc/state.rs similarity index 100% rename from packages/web/examples/todomvc/state.rs rename to examples/_examples/todomvc/state.rs diff --git a/packages/web/examples/todomvc/style.css b/examples/_examples/todomvc/style.css similarity index 100% rename from packages/web/examples/todomvc/style.css rename to examples/_examples/todomvc/style.css diff --git a/packages/web/examples/todomvc/todoitem.rs b/examples/_examples/todomvc/todoitem.rs similarity index 90% rename from packages/web/examples/todomvc/todoitem.rs rename to examples/_examples/todomvc/todoitem.rs index 5b08691f0..d050fa361 100644 --- a/packages/web/examples/todomvc/todoitem.rs +++ b/examples/_examples/todomvc/todoitem.rs @@ -8,7 +8,7 @@ pub struct TodoEntryProps { } pub fn TodoEntry(cx: Context, props: &TodoEntryProps) -> VNode { - let (is_editing, set_is_editing) = use_state(&cx, || false); + let (is_editing, set_is_editing) = use_state(cx, || false); let todo = use_atom_family(&cx, &TODOS, cx.id); cx.render(rsx! ( diff --git a/packages/web/examples/todomvc/todolist.rs b/examples/_examples/todomvc/todolist.rs similarity index 91% rename from packages/web/examples/todomvc/todolist.rs rename to examples/_examples/todomvc/todolist.rs index a42cd647e..8badc38b4 100644 --- a/packages/web/examples/todomvc/todolist.rs +++ b/examples/_examples/todomvc/todolist.rs @@ -7,8 +7,8 @@ use crate::{ use dioxus_core::prelude::*; pub fn TodoList(cx: Context<()>) -> VNode { - let (draft, set_draft) = use_state(&cx, || "".to_string()); - let (todos, _) = use_state(&cx, || Vec::::new()); + let (draft, set_draft) = use_state(cx, || "".to_string()); + let (todos, _) = use_state(cx, || Vec::::new()); let filter = use_atom(&cx, &FILTER); cx.render(rsx! { diff --git a/packages/web/examples/todomvc_simple.rs b/examples/_examples/todomvc_simple.rs similarity index 92% rename from packages/web/examples/todomvc_simple.rs rename to examples/_examples/todomvc_simple.rs index 660fdbe4c..189824a1a 100644 --- a/packages/web/examples/todomvc_simple.rs +++ b/examples/_examples/todomvc_simple.rs @@ -54,9 +54,9 @@ pub fn App(cx: Context<()>) -> VNode { } pub fn TodoList(cx: Context<()>) -> VNode { - let (draft, set_draft) = use_state_classic(&cx, || "".to_string()); - let (todos, set_todos) = use_state_classic(&cx, || HashMap::>::new()); - let (filter, set_filter) = use_state_classic(&cx, || FilterState::All); + let (draft, set_draft) = use_state_classic(cx, || "".to_string()); + let (todos, set_todos) = use_state_classic(cx, || HashMap::>::new()); + let (filter, set_filter) = use_state_classic(cx, || FilterState::All); cx.render(rsx! { div { @@ -103,7 +103,7 @@ pub struct TodoEntryProps { } pub fn TodoEntry(cx: Context) -> VNode { - let (is_editing, set_is_editing) = use_state_classic(&cx, || false); + let (is_editing, set_is_editing) = use_state_classic(cx, || false); let contents = ""; let todo = TodoItem { checked: false, diff --git a/packages/web/examples/todomvcsingle.rs b/examples/_examples/todomvcsingle.rs similarity index 97% rename from packages/web/examples/todomvcsingle.rs rename to examples/_examples/todomvcsingle.rs index e9c2437ac..434eb299f 100644 --- a/packages/web/examples/todomvcsingle.rs +++ b/examples/_examples/todomvcsingle.rs @@ -74,7 +74,7 @@ impl TodoManager { } pub fn TodoList(cx: Context<()>) -> VNode { - let draft = use_state(&cx, || "".to_string()); + let draft = use_state(cx, || "".to_string()); let todos = use_read(&cx, &TODO_LIST); let filter = use_read(&cx, &FILTER); @@ -118,7 +118,7 @@ pub struct TodoEntryProps { } pub fn TodoEntry(cx: Context, props: &TodoEntryProps) -> VNode { - let (is_editing, set_is_editing) = use_state_classic(&cx, || false); + let (is_editing, set_is_editing) = use_state_classic(cx, || false); let todo = use_read(&cx, &TODO_LIST).get(&cx.id).unwrap(); cx.render(rsx! ( diff --git a/packages/web/examples/weather.rs b/examples/_examples/weather.rs similarity index 100% rename from packages/web/examples/weather.rs rename to examples/_examples/weather.rs diff --git a/examples/calculator.rs b/examples/calculator.rs index 5c4078637..53dacf77b 100644 --- a/examples/calculator.rs +++ b/examples/calculator.rs @@ -19,9 +19,9 @@ enum Operator { } static App: FC<()> = |cx| { - let cur_val = use_state(&cx, || 0.0_f64); - let operator = use_state(&cx, || None as Option); - let display_value = use_state(&cx, || "".to_string()); + let cur_val = use_state(cx, || 0.0_f64); + let operator = use_state(cx, || None as Option); + let display_value = use_state(cx, || "".to_string()); let clear_display = display_value.eq("0"); let clear_text = if clear_display { "C" } else { "AC" }; diff --git a/examples/doggo.rs b/examples/doggo.rs index 829dcddef..84a1afe9a 100644 --- a/examples/doggo.rs +++ b/examples/doggo.rs @@ -2,7 +2,7 @@ use dioxus::prelude::*; fn main() {} static Example: FC<()> = |cx| { - let (g, set_g) = use_state_classic(&cx, || 0); + let (g, set_g) = use_state_classic(cx, || 0); let v = (0..10).map(move |f| { rsx!(li { onclick: move |_| set_g(10) diff --git a/packages/webview/examples/calculator.rs b/examples/examples/calculator.rs similarity index 100% rename from packages/webview/examples/calculator.rs rename to examples/examples/calculator.rs diff --git a/packages/webview/examples/demo.rs b/examples/examples/demo.rs similarity index 100% rename from packages/webview/examples/demo.rs rename to examples/examples/demo.rs diff --git a/packages/webview/examples/hifive.rs b/examples/examples/hifive.rs similarity index 100% rename from packages/webview/examples/hifive.rs rename to examples/examples/hifive.rs diff --git a/examples/model.rs b/examples/model.rs index 7f8dafe72..a5c59aa0d 100644 --- a/examples/model.rs +++ b/examples/model.rs @@ -23,7 +23,7 @@ fn main() { } static App: FC<()> = |cx| { - let calc = use_model(&cx, || Calculator::new()); + let calc = use_model(cx, || Calculator::new()); let clear_display = calc.display_value.eq("0"); let clear_text = if clear_display { "C" } else { "AC" }; diff --git a/examples/readme.rs b/examples/readme.rs index 7b3679d44..0a546f35f 100644 --- a/examples/readme.rs +++ b/examples/readme.rs @@ -3,13 +3,12 @@ //! The example from the README.md use dioxus::prelude::*; - fn main() { dioxus::web::launch(Example) } fn Example(cx: Context<()>) -> VNode { - let name = use_state(&cx, || "..?"); + let name = use_state(cx, || "..?"); cx.render(rsx! { h1 { "Hello, {name}" } @@ -17,21 +16,3 @@ fn Example(cx: Context<()>) -> VNode { button { "?", onclick: move |_| name.set("Dioxus 🎉")} }) } - -static Example2: FC<()> = |cx| { - let (g, set_g) = use_state_classic(&cx, || 0); - let v = (0..10).map(|f| { - dioxus::prelude::LazyNodes::new(move |__cx: &NodeFactory| { - __cx.element(dioxus_elements::li) - .listeners([dioxus::events::on::onclick(__cx, move |_| set_g(10))]) - .finish() - }) - }); - cx.render(dioxus::prelude::LazyNodes::new( - move |__cx: &NodeFactory| { - __cx.element(dioxus_elements::div) - .children([__cx.fragment_from_iter(v)]) - .finish() - }, - )) -}; diff --git a/examples/reducer.rs b/examples/reducer.rs index a4d459057..1408d58cc 100644 --- a/examples/reducer.rs +++ b/examples/reducer.rs @@ -8,7 +8,7 @@ fn main() {} use dioxus::prelude::*; pub static ExampleReducer: FC<()> = |cx| { - let (state, reduce) = use_reducer(&cx, PlayerState::new, PlayerState::reduce); + let (state, reduce) = use_reducer(cx, PlayerState::new, PlayerState::reduce); let is_playing = state.is_playing(); diff --git a/examples/reference/antipatterns.rs b/examples/reference/antipatterns.rs index 9bb1af9de..5ea2af648 100644 --- a/examples/reference/antipatterns.rs +++ b/examples/reference/antipatterns.rs @@ -85,7 +85,7 @@ static AntipatternNestedFragments: FC<()> = |cx| { /// recognize from the function signature, but Dioxus will not update the "live" version of state. Calling `set_state` /// merely places a new value in the queue and schedules the component for a future update. static AntipaternRelyingOnSetState: FC<()> = |cx| { - let (state, set_state) = use_state_classic(&cx, || "Hello world"); + let (state, set_state) = use_state_classic(cx, || "Hello world"); set_state("New state"); // This will return false! `state` will *still* be "Hello world" assert!(state == &"New state"); @@ -126,7 +126,7 @@ static AntipatternMisusedHooks: FC = |cx| { if cx.should_render_state { // do not place a hook in the conditional! // prefer to move it out of the conditional - let (state, set_state) = use_state_classic(&cx, || "hello world"); + let (state, set_state) = use_state_classic(cx, || "hello world"); rsx!(in cx, div { "{state}" }) } else { rsx!(in cx, div { "Not rendering state" }) diff --git a/examples/reference/empty.rs b/examples/reference/empty.rs index 95ef10506..b60c2e74c 100644 --- a/examples/reference/empty.rs +++ b/examples/reference/empty.rs @@ -7,9 +7,6 @@ use dioxus::prelude::*; fn main() {} static Example: FC<()> = |cx| { - cx.render(rsx! { - div { - - } - }) + // + cx.render(rsx! {}) }; diff --git a/examples/reference/iterators.rs b/examples/reference/iterators.rs index 73bd83f9b..27c7c0725 100644 --- a/examples/reference/iterators.rs +++ b/examples/reference/iterators.rs @@ -2,7 +2,7 @@ use dioxus::prelude::*; fn main() {} static Example: FC<()> = |cx| { - let (g, set_g) = use_state_classic(&cx, || 0); + let (g, set_g) = use_state_classic(cx, || 0); let v = (0..10).map(|f| { rsx! { li { diff --git a/examples/reference/listener.rs b/examples/reference/listener.rs index d463a9311..ce96931eb 100644 --- a/examples/reference/listener.rs +++ b/examples/reference/listener.rs @@ -11,7 +11,7 @@ fn main() {} /// We can use `set_name` in multiple closures; the closures automatically *copy* the reference to set_name. static ButtonList: FC<()> = |cx| { - let (name, set_name) = use_state_classic(&cx, || "...?"); + let (name, set_name) = use_state_classic(cx, || "...?"); let names = ["jack", "jill", "john", "jane"] .iter() diff --git a/examples/rsx_usage.rs b/examples/rsx_usage.rs index f5c811463..b5ce98fcd 100644 --- a/examples/rsx_usage.rs +++ b/examples/rsx_usage.rs @@ -47,7 +47,7 @@ fn main() { const NONE_ELEMENT: Option<()> = None; use baller::Baller; -use dioxus_core::prelude::*; +use dioxus::prelude::*; static Example: FC<()> = |cx| { let formatting = "formatting!"; diff --git a/examples/webview.rs b/examples/webview.rs index 29fc38e39..8953068c2 100644 --- a/examples/webview.rs +++ b/examples/webview.rs @@ -16,7 +16,7 @@ fn main() { } static App: FC<()> = |cx| { - let (count, set_count) = use_state_classic(&cx, || 0); + let (count, set_count) = use_state_classic(cx, || 0); cx.render(rsx! { div { diff --git a/notes/TODO.md b/notes/TODO.md index b32bde78f..daef30710 100644 --- a/notes/TODO.md +++ b/notes/TODO.md @@ -17,4 +17,4 @@ - [] Implement controlled inputs for select and textarea - [] ...somehow... noderefs.... -use_state(&cx, ) +use_state(cx, ) diff --git a/packages/core-macro/src/htm.rs b/packages/core-macro/src/htm.rs index 00fc568c5..8b10607f3 100644 --- a/packages/core-macro/src/htm.rs +++ b/packages/core-macro/src/htm.rs @@ -39,7 +39,7 @@ impl Parse for HtmlRender { return input.parse::()?.parse::(); } - // let cx: Ident = s.parse()?; + // let __cx: Ident = s.parse()?; // s.parse::()?; // if elements are in an array, return a bumpalo::collections::Vec rather than a Node. let kind = if input.peek(token::Bracket) { @@ -64,8 +64,8 @@ impl ToTokens for HtmlRender { // create a lazy tree that accepts a bump allocator let final_tokens = quote! { - dioxus::prelude::LazyNodes::new(move |cx| { - let bump = &cx.bump(); + dioxus::prelude::LazyNodes::new(move |__cx| { + let bump = __cx.bump(); #new_toks }) @@ -152,16 +152,18 @@ struct Element { impl ToTokens for ToToksCtx<&Element> { fn to_tokens(&self, tokens: &mut TokenStream2) { - // let cx = self.cx; - let name = &self.inner.name.to_string(); + // let __cx = self.__cx; + let name = &self.inner.name; + // let name = &self.inner.name.to_string(); tokens.append_all(quote! { - dioxus::builder::ElementBuilder::new(cx, #name) + __cx.element(dioxus_elements::#name) + // dioxus::builder::ElementBuilder::new( #name) }); for attr in self.inner.attrs.iter() { self.recurse(attr).to_tokens(tokens); } - if is_valid_svg_tag(name) { + if is_valid_svg_tag(&name.to_string()) { tokens.append_all(quote! { .namespace(Some("http://www.w3.org/2000/svg")) }); diff --git a/packages/core-macro/src/rsx/ambiguous.rs b/packages/core-macro/src/rsx/ambiguous.rs index 15a30aa06..59312d136 100644 --- a/packages/core-macro/src/rsx/ambiguous.rs +++ b/packages/core-macro/src/rsx/ambiguous.rs @@ -18,7 +18,6 @@ use syn::{ pub enum AmbiguousElement { Element(Element), Component(Component), - Fragment(Fragment), } impl Parse for AmbiguousElement { @@ -76,7 +75,6 @@ impl ToTokens for AmbiguousElement { match self { AmbiguousElement::Element(el) => el.to_tokens(tokens), AmbiguousElement::Component(comp) => comp.to_tokens(tokens), - AmbiguousElement::Fragment(frag) => frag.to_tokens(tokens), } } } diff --git a/packages/core-macro/src/rsx/component.rs b/packages/core-macro/src/rsx/component.rs index 4ed442729..98ccdc090 100644 --- a/packages/core-macro/src/rsx/component.rs +++ b/packages/core-macro/src/rsx/component.rs @@ -133,14 +133,17 @@ impl ToTokens for Component { let childs = &self.children; let children = quote! { - ChildrenList::new(__cx) - #( .add_child(#childs) )* - .finish() + [ #( #childs ),* ] }; + // ChildrenList::new(__cx) + // #( .add_child(#childs) )* + // .finish() + // ChildrenList::new(__cx) + // #( .add_child(#childs) )* + // .finish() tokens.append_all(quote! { - dioxus::builder::virtual_child( - __cx, + __cx.virtual_child( #name, #builder, #key_token, diff --git a/packages/core-macro/src/rsx/mod.rs b/packages/core-macro/src/rsx/mod.rs index 2611d8a26..7ff69d7d6 100644 --- a/packages/core-macro/src/rsx/mod.rs +++ b/packages/core-macro/src/rsx/mod.rs @@ -86,13 +86,13 @@ impl ToTokens for RsxRender { match &self.custom_context { // The `in cx` pattern allows directly rendering Some(ident) => out_tokens.append_all(quote! { - #ident.render(dioxus::prelude::LazyNodes::new(move |__cx: &NodeFactory|{ + #ident.render(dioxus::prelude::LazyNodes::new(move |__cx: NodeFactory|{ #inner })) }), // Otherwise we just build the LazyNode wrapper None => out_tokens.append_all(quote! { - dioxus::prelude::LazyNodes::new(move |__cx: &NodeFactory|{ + dioxus::prelude::LazyNodes::new(move |__cx: NodeFactory|{ #inner }) }), diff --git a/packages/core/src/events.rs b/packages/core/src/events.rs index 34a2fd4d9..46d167dd4 100644 --- a/packages/core/src/events.rs +++ b/packages/core/src/events.rs @@ -150,7 +150,7 @@ pub mod on { $( $(#[$method_attr])* pub fn $name<'a>( - c: &'_ NodeFactory<'a>, + c: NodeFactory<'a>, callback: impl Fn($wrapper) + 'a, ) -> Listener<'a> { let bump = &c.bump(); diff --git a/packages/core/src/hooks.rs b/packages/core/src/hooks.rs index 2b04abc96..a32d9e008 100644 --- a/packages/core/src/hooks.rs +++ b/packages/core/src/hooks.rs @@ -23,7 +23,7 @@ use std::{ /// Usage: /// ```ignore /// static Example: FC<()> = |cx| { -/// let (counter, set_counter) = use_state(&cx, || 0); +/// let (counter, set_counter) = use_state(cx, || 0); /// let increment = |_| set_couter(counter + 1); /// let decrement = |_| set_couter(counter + 1); /// @@ -145,7 +145,7 @@ impl<'a, T: 'static + Display> std::fmt::Display for UseState { /// Usage: /// ```ignore /// static Example: FC<()> = |cx| { -/// let (counter, set_counter) = use_state(&cx, || 0); +/// let (counter, set_counter) = use_state(cx, || 0); /// let increment = |_| set_couter(counter + 1); /// let decrement = |_| set_couter(counter + 1); /// diff --git a/packages/core/src/nodebuilder.rs b/packages/core/src/nodebuilder.rs index cef325d7d..4a32c9ad7 100644 --- a/packages/core/src/nodebuilder.rs +++ b/packages/core/src/nodebuilder.rs @@ -620,23 +620,17 @@ where } } -// impl IntoVNode<'_> for () { -// fn into_vnode<'a>(self, cx: NodeFactory<'a>) -> VNode<'a> { -// todo!(); -// VNode::Suspended { -// real: Cell::new(RealDomNode::empty()), -// } -// } -// } +impl IntoVNode<'_> for () { + fn into_vnode<'a>(self, cx: NodeFactory<'a>) -> VNode<'a> { + cx.fragment_from_iter(None as Option) + } +} -// impl IntoVNode<'_> for Option<()> { -// fn into_vnode<'a>(self, cx: NodeFactory<'a>) -> VNode<'a> { -// todo!(); -// VNode::Suspended { -// real: Cell::new(RealDomNode::empty()), -// } -// } -// } +impl IntoVNode<'_> for Option<()> { + fn into_vnode<'a>(self, cx: NodeFactory<'a>) -> VNode<'a> { + cx.fragment_from_iter(None as Option) + } +} /// Construct a text VNode. /// @@ -717,8 +711,6 @@ pub fn virtual_child<'a, T: Properties + 'a>( VNode::Component( cx.bump() .alloc(crate::nodes::VComponent::new(&cx, f, props, key, children)), - // cx.bump() - // .alloc(crate::nodes::VComponent::new(f, props, key)), ) } @@ -786,6 +778,26 @@ impl<'a> NodeFactory<'a> { })) } + pub fn virtual_child( + &self, + f: FC, + props: T, + key: Option<&'a str>, // key: NodeKey<'a>, + children: C, + ) -> VNode<'a> + where + C: 'a + AsRef<[VNode<'a>]>, + { + let children: &'a C = self.bump().alloc(children); + VNode::Component(self.bump().alloc(crate::nodes::VComponent::new( + self, + f, + props, + key, + children.as_ref(), + ))) + } + pub fn fragment_from_iter( self, node_iter: impl IntoIterator>, diff --git a/packages/docsite/src/main.rs b/packages/docsite/src/main.rs index fc4097127..c97a813d3 100644 --- a/packages/docsite/src/main.rs +++ b/packages/docsite/src/main.rs @@ -25,7 +25,7 @@ fn main() { } static App: FC<()> = |cx| { - let (url, set_url) = use_state(&cx, || ""); + let (url, set_url) = use_state(cx, || ""); let body = match *url { "community" => rsx!(in cx, Community {}), diff --git a/packages/docsite/src/snippets.md b/packages/docsite/src/snippets.md index 114d9c74f..31dc496b9 100644 --- a/packages/docsite/src/snippets.md +++ b/packages/docsite/src/snippets.md @@ -34,7 +34,7 @@ enum LightState { Red, } static HelloMessage: FC<()> = |cx| { - let (color, set_color) = use_state(&cx, || LightState::Green); + let (color, set_color) = use_state(cx, || LightState::Green); let title = match color { Green => "Green means go", diff --git a/packages/hooks/src/lib.rs b/packages/hooks/src/lib.rs index fd5b34aef..631f7c47b 100644 --- a/packages/hooks/src/lib.rs +++ b/packages/hooks/src/lib.rs @@ -20,7 +20,7 @@ This is moderately efficient because the fields of the map are moved, but the da However, if you used similar approach with Dioxus: ```rust -let (map, set_map) = use_state(&cx, || HashMap::new()); +let (map, set_map) = use_state(cx, || HashMap::new()); set_map({ let mut newmap = map.clone(); newmap.set(key, value); diff --git a/packages/liveview/examples/simpletide.rs b/packages/liveview/examples/simpletide.rs index 00c68bacb..d473de843 100644 --- a/packages/liveview/examples/simpletide.rs +++ b/packages/liveview/examples/simpletide.rs @@ -29,7 +29,7 @@ mod client { static APP: FC<()> = |cx| { todo!() - // let (selected_stream, set_stream) = use_state(&cx, || SelectedStream::Football); + // let (selected_stream, set_stream) = use_state(cx, || SelectedStream::Football); // let opts = SelectedStream::iter().map(|name| rsx! { option { "{name}", value: "{name}" } }); diff --git a/packages/liveview/examples/tide.rs b/packages/liveview/examples/tide.rs index efb78a75e..5ea3f1fc5 100644 --- a/packages/liveview/examples/tide.rs +++ b/packages/liveview/examples/tide.rs @@ -29,7 +29,7 @@ mod client { static APP: FC<()> = |cx| { todo!() - // let (selected_stream, set_stream) = use_state(&cx, || SelectedStream::Football); + // let (selected_stream, set_stream) = use_state(cx, || SelectedStream::Football); // let opts = SelectedStream::iter().map(|name| rsx! { option { "{name}", value: "{name}" } }); diff --git a/packages/webview/README.md b/packages/webview/README.md index 5c2d66560..81131a71e 100644 --- a/packages/webview/README.md +++ b/packages/webview/README.md @@ -9,7 +9,7 @@ Dioxus-webview is an attempt at making a simpler "Tauri" where creating desktop #[async_std::main] async fn main() { dioxus_webview::new(|cx| { - let (count, set_count) = use_state(&cx, || 0); + let (count, set_count) = use_state(cx, || 0); cx.render(html! {

"Dioxus Desktop Demo"

@@ -44,4 +44,4 @@ By bridging the native process, desktop apps can access full multithreading powe Dioxus-desktop is a pure liveview application where all of the state and event handlers are proxied through the liveview and into the native process. For pure server-based liveview, this would normally be too slow (in both render performance and latency), but because the VDom is local, desktop apps are just as fast as Electron. -Dioxus-desktop leverages dioxus-liveview under the hood, but with convenience wrappers around setting up the VDom bridge, proxying events, and serving the initial WebSys-Renderer. The backend is served by Tide, so an async runtime _is_ needed - we recommend async-std in tokio mode. +Dioxus-desktop leverages dioxus-liveview under the hood, but with convenience wrappers around setting up the VDom bridge, proxying events, and serving the initial WebSys-Renderer. The backend is served by Tide, so an async runtime _is_ needed - we recommend async-std in Tokio mode. diff --git a/src/lib.rs b/src/lib.rs index 6661c9cd6..ebac40005 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -94,7 +94,7 @@ //! //! ``` //! static Example: FC<()> = |cx| { -//! let (val, set_val) = use_state(&cx, || 0); +//! let (val, set_val) = use_state(cx, || 0); //! cx.render(rsx!( //! button { onclick: move |_| set_val(val + 1) } //! ))