From 6c323e9fc55b6863e3037ceba7dff5ae904fa607 Mon Sep 17 00:00:00 2001 From: Reinis Mazeiks Date: Thu, 7 Jul 2022 11:50:36 +0300 Subject: [PATCH] Rework Guide (#486) * Move getting started to Guide * Clean up summary and getting started * Shorten intro by moving stuff to individual platform docs * Make intro even shorter, summarize features * Further cleanup; move development-related docs to separate section * Make `guide` a crate. Turn code samples into examples so that we can check if they compile * Rewrite "Describing the UI": * Focus on RSX syntax (interactivity covered in later chapters); make sure samples are tested; concise language * Move some "special attribute" samples to the `examples` directory * Simplify introduction to components * Simplify introduction to component props * Document Prop features; add code samples * Simplify component children docs * Interactivity: better introduction to events * Hooks: better introduction * Remove outdated doc * Introducs use_ref * Simplify User Input chapter * Document event handler props * Meme editor example * Meme editor walkthrough * Add dark mode example * Guide for context; dark mode example * Guide: custom hooks * Guide: conditional rendering * Guide: rendering lists * Guide: rendering lists + keys * Move remaining infor from Reference to guide * Delete reference book --- Cargo.toml | 1 + docs/guide/Cargo.toml | 12 + docs/guide/book.toml | 2 +- docs/guide/examples/Readme.md | 1 + docs/guide/examples/anti_patterns.rs | 71 +++++ docs/guide/examples/boolean_attribute.rs | 17 + .../examples/component_borrowed_props.rs | 27 ++ docs/guide/examples/component_children.rs | 36 +++ .../examples/component_children_inspect.rs | 37 +++ .../guide/examples/component_element_props.rs | 36 +++ docs/guide/examples/component_owned_props.rs | 34 ++ .../guide/examples/component_props_options.rs | 113 +++++++ docs/guide/examples/components.rs | 24 ++ docs/guide/examples/conditional_rendering.rs | 60 ++++ docs/guide/examples/dangerous_inner_html.rs | 19 ++ docs/guide/examples/event_click.rs | 17 + docs/guide/examples/event_handler_prop.rs | 33 ++ docs/guide/examples/event_nested.rs | 24 ++ docs/guide/examples/event_prevent_default.rs | 17 + docs/guide/examples/hello_world_desktop.rs | 18 ++ docs/guide/examples/hello_world_tui.rs | 20 ++ .../examples/hello_world_tui_no_ctrl_c.rs | 36 +++ docs/guide/examples/hello_world_web.rs | 14 + docs/guide/examples/hooks_bad.rs | 67 ++++ docs/guide/examples/hooks_composed.rs | 13 + docs/guide/examples/hooks_counter.rs | 18 ++ .../guide/examples/hooks_counter_two_state.rs | 24 ++ docs/guide/examples/hooks_use_ref.rs | 23 ++ docs/guide/examples/input_controlled.rs | 21 ++ docs/guide/examples/input_uncontrolled.rs | 22 ++ docs/guide/examples/meme_editor.rs | 105 +++++++ docs/guide/examples/meme_editor_dark_mode.rs | 184 +++++++++++ docs/guide/examples/rendering_lists.rs | 60 ++++ docs/guide/examples/rsx_overview.rs | 109 +++++++ docs/guide/examples/spawn.rs | 84 +++++ docs/guide/examples/use_future.rs | 60 ++++ docs/guide/src/README.md | 105 ------- docs/guide/src/SUMMARY.md | 77 ++--- docs/guide/src/__unused/README.md | 6 + .../advanced-guides/06-subscription-api.md | 0 .../advanced-guides/10-concurrent-mode.md | 0 .../advanced-guides/11-arena-memo.md | 4 +- .../advanced-guides/12-signals.md | 6 +- .../advanced-guides/13-subtrees.md | 4 +- .../advanced-guides/custom-renderer.md | 6 +- .../advanced-guides/liveview.md | 2 +- .../src/{ => __unused}/advanced-guides/rsx.md | 6 +- .../{ => __unused}/advanced-guides/testing.md | 2 +- .../guide/src/__unused/attribute_spreading.md | 29 ++ .../src/{components => __unused}/composing.md | 2 +- docs/guide/src/__unused/event_javascript.rs | 26 ++ docs/guide/src/{state => __unused}/fanout.md | 4 +- docs/guide/src/__unused/hello_world.md | 14 + .../{helpers/index.md => __unused/helpers.md} | 8 +- docs/guide/src/{state => __unused}/index.md | 6 +- .../src/{state => __unused}/localstate.md | 6 +- docs/guide/src/__unused/memoization.md | 28 ++ docs/guide/src/__unused/model_pattern.md | 67 ++++ docs/guide/src/advanced-guides/00-index.md | 73 ----- .../guide/src/advanced-guides/rsx_in_depth.md | 229 -------------- docs/guide/src/async/asynctasks.md | 90 ------ docs/guide/src/async/index.md | 99 +----- docs/guide/src/async/loading_state.md | 8 - docs/guide/src/async/spawn.md | 29 ++ .../async/{coroutines.md => use_coroutine.md} | 4 +- docs/guide/src/async/use_future.md | 80 +---- docs/guide/src/best_practices/antipatterns.md | 33 ++ .../error_handling.md} | 2 +- docs/guide/src/best_practices/index.md | 29 ++ .../src/components/component_children.md | 218 ------------- .../components/component_example_title.png | Bin 8426 -> 0 bytes .../components/component_example_votes.png | Bin 4244 -> 0 bytes .../src/components/exporting_components.md | 292 ------------------ docs/guide/src/components/index.md | 42 --- docs/guide/src/components/propsmacro.md | 232 -------------- docs/guide/src/contributing.md | 20 ++ .../src/custom_renderer/index.md} | 4 +- .../src/describing_ui/component_children.md | 31 ++ .../src/describing_ui/component_props.md | 141 +++++++++ docs/guide/src/describing_ui/components.md | 27 ++ .../component_borrowed_props_screenshot.png | Bin 0 -> 7868 bytes .../component_owned_props_screenshot.png | Bin 0 -> 6318 bytes .../images/screenshot_about_component.png | Bin 0 -> 19470 bytes docs/guide/src/describing_ui/index.md | 106 +++++++ .../src/describing_ui/special_attributes.md | 63 ++++ .../src/elements/conditional_rendering.md | 184 ----------- docs/guide/src/elements/index.md | 73 ----- docs/guide/src/elements/lists.md | 145 --------- docs/guide/src/elements/special_attributes.md | 191 ------------ docs/guide/src/elements/vnodes.md | 175 ----------- docs/guide/src/final.md | 49 --- docs/guide/src/getting_started/desktop.md | 45 +++ .../src/getting_started/hot_reload.md} | 3 +- docs/guide/src/getting_started/index.md | 74 +++++ .../src/getting_started}/mobile.md | 24 +- .../src/getting_started}/ssr.md | 31 +- docs/guide/src/getting_started/tui.md | 46 +++ docs/guide/src/getting_started/web.md | 72 +++++ docs/guide/src/hello_world.md | 152 --------- docs/guide/src/images/01-setup-helloworld.png | Bin 31031 -> 0 bytes docs/guide/src/images/helloworld.png | Bin 31650 -> 0 bytes docs/guide/src/images/reddit.png | Bin 166746 -> 0 bytes docs/guide/src/images/reddit_post.png | Bin 26297 -> 0 bytes .../src/images/reddit_post_components.png | Bin 26651 -> 0 bytes docs/guide/src/index.md | 51 +++ docs/guide/src/interactivity/custom_hooks.md | 26 ++ .../src/interactivity/dynamic_rendering.md | 73 +++++ .../guide/src/interactivity/event_handlers.md | 134 +++----- docs/guide/src/interactivity/hooks.md | 288 ++++------------- .../src/interactivity/images/counter.png | Bin 0 -> 11368 bytes .../images/counter_two_state.png | Bin 0 -> 14503 bytes .../images/meme_editor_screenshot.png | Bin 0 -> 371060 bytes .../guide/src/interactivity/importanthooks.md | 10 - docs/guide/src/interactivity/index.md | 216 +------------ docs/guide/src/interactivity/lifecycles.md | 11 - .../src/{state => interactivity}/router.md | 4 +- docs/guide/src/interactivity/sharing_state.md | 66 ++++ docs/guide/src/interactivity/user_input.md | 83 +---- docs/guide/src/interactivity/useref.md | 155 ---------- docs/guide/src/interactivity/usestate.md | 114 ------- docs/guide/src/lib.rs | 1 + docs/guide/src/misc/contributors.md | 8 - .../publishing.md => publishing/desktop.md} | 4 +- docs/guide/src/publishing/index.md | 1 + docs/guide/src/publishing/web.md | 8 + docs/guide/src/{ROADMAP.md => roadmap.md} | 29 +- docs/guide/src/setup.md | 114 ------- docs/guide/src/state/fermi.md | 110 ------- docs/guide/src/state/liftingstate.md | 130 -------- docs/guide/src/state/sharedstate.md | 65 ---- docs/guide/src/tutorial/index.md | 23 -- docs/guide/src/tutorial/new_app.md | 60 ---- docs/reference/.gitignore | 1 - docs/reference/book.toml | 0 docs/reference/src/README.md | 27 -- docs/reference/src/SUMMARY.md | 15 - docs/reference/src/guide/index.md | 1 - docs/reference/src/guide/rsx_in_depth.md | 231 -------------- docs/reference/src/images/dioxuslogo_full.png | Bin 59292 -> 0 bytes docs/reference/src/platforms/desktop.md | 47 --- docs/reference/src/platforms/index.md | 10 - docs/reference/src/platforms/tui.md | 98 ------ docs/reference/src/platforms/web.md | 111 ------- examples/core_reference/antipatterns.rs | 185 ----------- examples/core_reference/basics.rs | 38 --- examples/core_reference/children.rs | 47 --- .../core_reference/conditional_rendering.rs | 114 ------- examples/core_reference/controlled_inputs.rs | 37 --- examples/core_reference/empty.rs | 10 - examples/core_reference/fragments.rs | 51 --- examples/core_reference/iterators.rs | 34 -- examples/core_reference/listener.rs | 55 ---- 152 files changed, 2827 insertions(+), 5052 deletions(-) create mode 100644 docs/guide/Cargo.toml create mode 100644 docs/guide/examples/Readme.md create mode 100644 docs/guide/examples/anti_patterns.rs create mode 100644 docs/guide/examples/boolean_attribute.rs create mode 100644 docs/guide/examples/component_borrowed_props.rs create mode 100644 docs/guide/examples/component_children.rs create mode 100644 docs/guide/examples/component_children_inspect.rs create mode 100644 docs/guide/examples/component_element_props.rs create mode 100644 docs/guide/examples/component_owned_props.rs create mode 100644 docs/guide/examples/component_props_options.rs create mode 100644 docs/guide/examples/components.rs create mode 100644 docs/guide/examples/conditional_rendering.rs create mode 100644 docs/guide/examples/dangerous_inner_html.rs create mode 100644 docs/guide/examples/event_click.rs create mode 100644 docs/guide/examples/event_handler_prop.rs create mode 100644 docs/guide/examples/event_nested.rs create mode 100644 docs/guide/examples/event_prevent_default.rs create mode 100644 docs/guide/examples/hello_world_desktop.rs create mode 100644 docs/guide/examples/hello_world_tui.rs create mode 100644 docs/guide/examples/hello_world_tui_no_ctrl_c.rs create mode 100644 docs/guide/examples/hello_world_web.rs create mode 100644 docs/guide/examples/hooks_bad.rs create mode 100644 docs/guide/examples/hooks_composed.rs create mode 100644 docs/guide/examples/hooks_counter.rs create mode 100644 docs/guide/examples/hooks_counter_two_state.rs create mode 100644 docs/guide/examples/hooks_use_ref.rs create mode 100644 docs/guide/examples/input_controlled.rs create mode 100644 docs/guide/examples/input_uncontrolled.rs create mode 100644 docs/guide/examples/meme_editor.rs create mode 100644 docs/guide/examples/meme_editor_dark_mode.rs create mode 100644 docs/guide/examples/rendering_lists.rs create mode 100644 docs/guide/examples/rsx_overview.rs create mode 100644 docs/guide/examples/spawn.rs create mode 100644 docs/guide/examples/use_future.rs delete mode 100644 docs/guide/src/README.md create mode 100644 docs/guide/src/__unused/README.md rename docs/guide/src/{ => __unused}/advanced-guides/06-subscription-api.md (100%) rename docs/guide/src/{ => __unused}/advanced-guides/10-concurrent-mode.md (100%) rename docs/guide/src/{ => __unused}/advanced-guides/11-arena-memo.md (87%) rename docs/guide/src/{ => __unused}/advanced-guides/12-signals.md (87%) rename docs/guide/src/{ => __unused}/advanced-guides/13-subtrees.md (76%) rename docs/guide/src/{ => __unused}/advanced-guides/custom-renderer.md (92%) rename docs/guide/src/{ => __unused}/advanced-guides/liveview.md (88%) rename docs/guide/src/{ => __unused}/advanced-guides/rsx.md (74%) rename docs/guide/src/{ => __unused}/advanced-guides/testing.md (97%) create mode 100644 docs/guide/src/__unused/attribute_spreading.md rename docs/guide/src/{components => __unused}/composing.md (98%) create mode 100644 docs/guide/src/__unused/event_javascript.rs rename docs/guide/src/{state => __unused}/fanout.md (79%) create mode 100644 docs/guide/src/__unused/hello_world.md rename docs/guide/src/{helpers/index.md => __unused/helpers.md} (93%) rename docs/guide/src/{state => __unused}/index.md (77%) rename docs/guide/src/{state => __unused}/localstate.md (84%) create mode 100644 docs/guide/src/__unused/memoization.md create mode 100644 docs/guide/src/__unused/model_pattern.md delete mode 100644 docs/guide/src/advanced-guides/00-index.md delete mode 100644 docs/guide/src/advanced-guides/rsx_in_depth.md delete mode 100644 docs/guide/src/async/asynctasks.md delete mode 100644 docs/guide/src/async/loading_state.md create mode 100644 docs/guide/src/async/spawn.md rename docs/guide/src/async/{coroutines.md => use_coroutine.md} (94%) create mode 100644 docs/guide/src/best_practices/antipatterns.md rename docs/guide/src/{state/errorhandling.md => best_practices/error_handling.md} (99%) create mode 100644 docs/guide/src/best_practices/index.md delete mode 100644 docs/guide/src/components/component_children.md delete mode 100644 docs/guide/src/components/component_example_title.png delete mode 100644 docs/guide/src/components/component_example_votes.png delete mode 100644 docs/guide/src/components/exporting_components.md delete mode 100644 docs/guide/src/components/index.md delete mode 100644 docs/guide/src/components/propsmacro.md create mode 100644 docs/guide/src/contributing.md rename docs/{reference/src/guide/custom_renderer.md => guide/src/custom_renderer/index.md} (97%) create mode 100644 docs/guide/src/describing_ui/component_children.md create mode 100644 docs/guide/src/describing_ui/component_props.md create mode 100644 docs/guide/src/describing_ui/components.md create mode 100644 docs/guide/src/describing_ui/images/component_borrowed_props_screenshot.png create mode 100644 docs/guide/src/describing_ui/images/component_owned_props_screenshot.png create mode 100644 docs/guide/src/describing_ui/images/screenshot_about_component.png create mode 100644 docs/guide/src/describing_ui/index.md create mode 100644 docs/guide/src/describing_ui/special_attributes.md delete mode 100644 docs/guide/src/elements/conditional_rendering.md delete mode 100644 docs/guide/src/elements/index.md delete mode 100644 docs/guide/src/elements/lists.md delete mode 100644 docs/guide/src/elements/special_attributes.md delete mode 100644 docs/guide/src/elements/vnodes.md delete mode 100644 docs/guide/src/final.md create mode 100644 docs/guide/src/getting_started/desktop.md rename docs/{reference/src/guide/hot_reloading.md => guide/src/getting_started/hot_reload.md} (97%) create mode 100644 docs/guide/src/getting_started/index.md rename docs/{reference/src/platforms => guide/src/getting_started}/mobile.md (59%) rename docs/{reference/src/platforms => guide/src/getting_started}/ssr.md (68%) create mode 100644 docs/guide/src/getting_started/tui.md create mode 100644 docs/guide/src/getting_started/web.md delete mode 100644 docs/guide/src/hello_world.md delete mode 100644 docs/guide/src/images/01-setup-helloworld.png delete mode 100644 docs/guide/src/images/helloworld.png delete mode 100644 docs/guide/src/images/reddit.png delete mode 100644 docs/guide/src/images/reddit_post.png delete mode 100644 docs/guide/src/images/reddit_post_components.png create mode 100644 docs/guide/src/index.md create mode 100644 docs/guide/src/interactivity/custom_hooks.md create mode 100644 docs/guide/src/interactivity/dynamic_rendering.md create mode 100644 docs/guide/src/interactivity/images/counter.png create mode 100644 docs/guide/src/interactivity/images/counter_two_state.png create mode 100644 docs/guide/src/interactivity/images/meme_editor_screenshot.png delete mode 100644 docs/guide/src/interactivity/importanthooks.md delete mode 100644 docs/guide/src/interactivity/lifecycles.md rename docs/guide/src/{state => interactivity}/router.md (87%) create mode 100644 docs/guide/src/interactivity/sharing_state.md delete mode 100644 docs/guide/src/interactivity/useref.md delete mode 100644 docs/guide/src/interactivity/usestate.md create mode 100644 docs/guide/src/lib.rs delete mode 100644 docs/guide/src/misc/contributors.md rename docs/guide/src/{tutorial/publishing.md => publishing/desktop.md} (87%) create mode 100644 docs/guide/src/publishing/index.md create mode 100644 docs/guide/src/publishing/web.md rename docs/guide/src/{ROADMAP.md => roadmap.md} (81%) delete mode 100644 docs/guide/src/setup.md delete mode 100644 docs/guide/src/state/fermi.md delete mode 100644 docs/guide/src/state/liftingstate.md delete mode 100644 docs/guide/src/state/sharedstate.md delete mode 100644 docs/guide/src/tutorial/index.md delete mode 100644 docs/guide/src/tutorial/new_app.md delete mode 100644 docs/reference/.gitignore delete mode 100644 docs/reference/book.toml delete mode 100644 docs/reference/src/README.md delete mode 100644 docs/reference/src/SUMMARY.md delete mode 100644 docs/reference/src/guide/index.md delete mode 100644 docs/reference/src/guide/rsx_in_depth.md delete mode 100644 docs/reference/src/images/dioxuslogo_full.png delete mode 100644 docs/reference/src/platforms/desktop.md delete mode 100644 docs/reference/src/platforms/index.md delete mode 100644 docs/reference/src/platforms/tui.md delete mode 100644 docs/reference/src/platforms/web.md delete mode 100644 examples/core_reference/antipatterns.rs delete mode 100644 examples/core_reference/basics.rs delete mode 100644 examples/core_reference/children.rs delete mode 100644 examples/core_reference/conditional_rendering.rs delete mode 100644 examples/core_reference/controlled_inputs.rs delete mode 100644 examples/core_reference/empty.rs delete mode 100644 examples/core_reference/fragments.rs delete mode 100644 examples/core_reference/iterators.rs delete mode 100644 examples/core_reference/listener.rs diff --git a/Cargo.toml b/Cargo.toml index 483e418a5..3c3f78b7e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -72,6 +72,7 @@ members = [ "packages/native-core", "packages/native-core-macro", "packages/rsx-prelude", + "docs/guide", ] [dev-dependencies] diff --git a/docs/guide/Cargo.toml b/docs/guide/Cargo.toml new file mode 100644 index 000000000..50edb6d7e --- /dev/null +++ b/docs/guide/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "dioxus-guide" +version = "0.0.1" +edition = "2021" +description = "Dioxus guide, including testable examples" +license = "MIT/Apache-2.0" + +[dev-dependencies] +dioxus = { path = "../..", features = ["desktop", "web", "ssr", "router", "fermi", "tui"] } +serde = { version = "1.0.138", features=["derive"] } +reqwest = { version = "0.11.11", features = ["json"] } +tokio = { version = "1.19.2" , features=[]} \ No newline at end of file diff --git a/docs/guide/book.toml b/docs/guide/book.toml index eabbe6f2b..91def1354 100644 --- a/docs/guide/book.toml +++ b/docs/guide/book.toml @@ -1,6 +1,6 @@ [book] title = "Dioxus Documentation" -description = "Create book from markdown files. Like Gitbook but implemented in Rust" +description = "Get started with Dioxus, a portable, performant, and ergonomic framework for building cross-platform user interfaces in Rust" authors = ["Jonathan Kelley"] language = "en" diff --git a/docs/guide/examples/Readme.md b/docs/guide/examples/Readme.md new file mode 100644 index 000000000..891fc8fe4 --- /dev/null +++ b/docs/guide/examples/Readme.md @@ -0,0 +1 @@ +Some of these examples (e.g. web) cannot be run. The code samples are here mostly so that we can easily check that they compile using `cargo test`. \ No newline at end of file diff --git a/docs/guide/examples/anti_patterns.rs b/docs/guide/examples/anti_patterns.rs new file mode 100644 index 000000000..3911bfa0a --- /dev/null +++ b/docs/guide/examples/anti_patterns.rs @@ -0,0 +1,71 @@ +#![allow(non_snake_case, unused)] + +//! This example shows what *not* to do + +use std::collections::HashMap; + +use dioxus::prelude::*; + +fn main() {} + +fn AntipatternNestedFragments(cx: Scope<()>) -> Element { + // ANCHOR: nested_fragments + // ❌ Don't unnecessarily nest fragments + let _ = cx.render(rsx!( + Fragment { + Fragment { + Fragment { + Fragment { + Fragment { + div { "Finally have a real node!" } + } + } + } + } + } + )); + + // ✅ Render shallow structures + cx.render(rsx!( + div { "Finally have a real node!" } + )) + // ANCHOR_END: nested_fragments +} + +#[derive(PartialEq, Props)] +struct NoKeysProps { + data: HashMap, +} + +fn AntipatternNoKeys(cx: Scope) -> Element { + // ANCHOR: iter_keys + let data: &HashMap<_, _> = &cx.props.data; + + // ❌ No keys + cx.render(rsx! { + ul { + data.values().map(|value| rsx!( + li { "List item: {value}" } + )) + } + }); + + // ❌ Using index as keys + cx.render(rsx! { + ul { + cx.props.data.values().enumerate().map(|(index, value)| rsx!( + li { key: "{index}", "List item: {value}" } + )) + } + }); + + // ✅ Using unique IDs as keys: + cx.render(rsx! { + ul { + cx.props.data.iter().map(|(key, value)| rsx!( + li { key: "{key}", "List item: {value}" } + )) + } + }) + // ANCHOR_END: iter_keys +} diff --git a/docs/guide/examples/boolean_attribute.rs b/docs/guide/examples/boolean_attribute.rs new file mode 100644 index 000000000..f624de331 --- /dev/null +++ b/docs/guide/examples/boolean_attribute.rs @@ -0,0 +1,17 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +fn App(cx: Scope) -> Element { + // ANCHOR: boolean_attribute + cx.render(rsx! { + div { + hidden: "false", + "hello" + } + }) + // ANCHOR_END: boolean_attribute +} diff --git a/docs/guide/examples/component_borrowed_props.rs b/docs/guide/examples/component_borrowed_props.rs new file mode 100644 index 000000000..ed6beb1af --- /dev/null +++ b/docs/guide/examples/component_borrowed_props.rs @@ -0,0 +1,27 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +// ANCHOR: App +fn App(cx: Scope) -> Element { + let hello = "Hello Dioxus!"; + + cx.render(rsx!(TitleCard { title: hello })) +} +// ANCHOR_END: App + +// ANCHOR: TitleCard +#[derive(Props)] +struct TitleCardProps<'a> { + title: &'a str, +} + +fn TitleCard<'a>(cx: Scope<'a, TitleCardProps<'a>>) -> Element { + cx.render(rsx! { + h1 { "{cx.props.title}" } + }) +} +// ANCHOR_END: TitleCard diff --git a/docs/guide/examples/component_children.rs b/docs/guide/examples/component_children.rs new file mode 100644 index 000000000..37ba59ba8 --- /dev/null +++ b/docs/guide/examples/component_children.rs @@ -0,0 +1,36 @@ +// ANCHOR: all +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +fn App(cx: Scope) -> Element { + // ANCHOR: Clickable_usage + cx.render(rsx! { + Clickable { + href: "https://www.youtube.com/watch?v=C-M2hs3sXGo", + "How to " i {"not"} " be seen" + } + }) + // ANCHOR_END: Clickable_usage +} + +// ANCHOR: Clickable +#[derive(Props)] +struct ClickableProps<'a> { + href: &'a str, + children: Element<'a>, +} + +fn Clickable<'a>(cx: Scope<'a, ClickableProps<'a>>) -> Element { + cx.render(rsx!( + a { + href: "{cx.props.href}", + class: "fancy-button", + &cx.props.children + } + )) +} +// ANCHOR_END: Clickable diff --git a/docs/guide/examples/component_children_inspect.rs b/docs/guide/examples/component_children_inspect.rs new file mode 100644 index 000000000..1a239890f --- /dev/null +++ b/docs/guide/examples/component_children_inspect.rs @@ -0,0 +1,37 @@ +// ANCHOR: all +#![allow(non_snake_case, unused)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +fn App(cx: Scope) -> Element { + // ANCHOR: Clickable_usage + cx.render(rsx! { + Clickable { + href: "https://www.youtube.com/watch?v=C-M2hs3sXGo", + "How to " i {"not"} " be seen" + } + }) + // ANCHOR_END: Clickable_usage +} + +#[derive(Props)] +struct ClickableProps<'a> { + href: &'a str, + children: Element<'a>, +} + +// ANCHOR: Clickable +fn Clickable<'a>(cx: Scope<'a, ClickableProps<'a>>) -> Element { + match cx.props.children { + Some(VNode::Text(_)) => { + todo!("render some stuff") + } + _ => { + todo!("render some other stuff") + } + } +} +// ANCHOR_END: Clickable diff --git a/docs/guide/examples/component_element_props.rs b/docs/guide/examples/component_element_props.rs new file mode 100644 index 000000000..86ff67bc7 --- /dev/null +++ b/docs/guide/examples/component_element_props.rs @@ -0,0 +1,36 @@ +// ANCHOR: all +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +fn App(cx: Scope) -> Element { + // ANCHOR: Clickable_usage + cx.render(rsx! { + Clickable { + href: "https://www.youtube.com/watch?v=C-M2hs3sXGo", + body: cx.render(rsx!("How to " i {"not"} " be seen")), + } + }) + // ANCHOR_END: Clickable_usage +} + +// ANCHOR: Clickable +#[derive(Props)] +struct ClickableProps<'a> { + href: &'a str, + body: Element<'a>, +} + +fn Clickable<'a>(cx: Scope<'a, ClickableProps<'a>>) -> Element { + cx.render(rsx!( + a { + href: "{cx.props.href}", + class: "fancy-button", + &cx.props.body + } + )) +} +// ANCHOR_END: Clickable diff --git a/docs/guide/examples/component_owned_props.rs b/docs/guide/examples/component_owned_props.rs new file mode 100644 index 000000000..04fb6e2eb --- /dev/null +++ b/docs/guide/examples/component_owned_props.rs @@ -0,0 +1,34 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +// ANCHOR: App +fn App(cx: Scope) -> Element { + cx.render(rsx! { + Likes { + score: 42, + }, + }) +} +// ANCHOR_END: App + +// ANCHOR: Likes +// Remember: Owned props must implement `PartialEq`! +#[derive(PartialEq, Props)] +struct LikesProps { + score: i32, +} + +fn Likes(cx: Scope) -> Element { + cx.render(rsx! { + div { + "This post has ", + b { "{cx.props.score}" }, + " likes" + } + }) +} +// ANCHOR_END: Likes diff --git a/docs/guide/examples/component_props_options.rs b/docs/guide/examples/component_props_options.rs new file mode 100644 index 000000000..28482e421 --- /dev/null +++ b/docs/guide/examples/component_props_options.rs @@ -0,0 +1,113 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +fn App(cx: Scope) -> Element { + cx.render(rsx! { + // ANCHOR: OptionalProps_usage + Title { + title: "Some Title", + }, + Title { + title: "Some Title", + subtitle: "Some Subtitle", + }, + // Providing an Option explicitly won't compile though: + // Title { + // title: "Some Title", + // subtitle: None, + // }, + // ANCHOR_END: OptionalProps_usage + + // ANCHOR: ExplicitOption_usage + ExplicitOption { + title: "Some Title", + subtitle: None, + }, + ExplicitOption { + title: "Some Title", + subtitle: Some("Some Title"), + }, + // This won't compile: + // ExplicitOption { + // title: "Some Title", + // }, + // ANCHOR_END: ExplicitOption_usage + + // ANCHOR: DefaultComponent_usage + DefaultComponent { + number: 5, + }, + DefaultComponent {}, + // ANCHOR_END: DefaultComponent_usage + + // ANCHOR: IntoComponent_usage + IntoComponent { + string: "some &str", + }, + // ANCHOR_END: IntoComponent_usage + }) +} + +// ANCHOR: OptionalProps +#[derive(Props)] +struct OptionalProps<'a> { + title: &'a str, + subtitle: Option<&'a str>, +} + +fn Title<'a>(cx: Scope<'a, OptionalProps>) -> Element<'a> { + return cx.render(rsx!(h1{ + "{cx.props.title}: ", + [cx.props.subtitle.unwrap_or("No subtitle provided")], + })); +} +// ANCHOR_END: OptionalProps + +// ANCHOR: ExplicitOption +#[derive(Props)] +struct ExplicitOptionProps<'a> { + title: &'a str, + #[props(!optional)] + subtitle: Option<&'a str>, +} + +fn ExplicitOption<'a>(cx: Scope<'a, ExplicitOptionProps>) -> Element<'a> { + return cx.render(rsx!(h1{ + "{cx.props.title}: ", + [cx.props.subtitle.unwrap_or("No subtitle provided")], + })); +} +// ANCHOR_END: ExplicitOption + +// ANCHOR: DefaultComponent +#[derive(PartialEq, Props)] +struct DefaultProps { + // default to 42 when not provided + #[props(default = 42)] + number: i64, +} + +fn DefaultComponent(cx: Scope) -> Element { + return cx.render(rsx!(h1{ + "{cx.props.number}", + })); +} +// ANCHOR_END: DefaultComponent + +// ANCHOR: IntoComponent +#[derive(PartialEq, Props)] +struct IntoProps { + #[props(into)] + string: String, +} + +fn IntoComponent(cx: Scope) -> Element { + return cx.render(rsx!(h1{ + "{cx.props.string}", + })); +} +// ANCHOR_END: IntoComponent diff --git a/docs/guide/examples/components.rs b/docs/guide/examples/components.rs new file mode 100644 index 000000000..476eadc8d --- /dev/null +++ b/docs/guide/examples/components.rs @@ -0,0 +1,24 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +// ANCHOR: App +fn App(cx: Scope) -> Element { + cx.render(rsx! { + About {}, + About {}, + }) +} +// ANCHOR_END: App + +// ANCHOR: About +pub fn About(cx: Scope) -> Element { + cx.render(rsx!(p { + b {"Dioxus Labs"} + " An Open Source project dedicated to making Rust UI wonderful." + })) +} +// ANCHOR_END: About diff --git a/docs/guide/examples/conditional_rendering.rs b/docs/guide/examples/conditional_rendering.rs new file mode 100644 index 000000000..5dbadd29b --- /dev/null +++ b/docs/guide/examples/conditional_rendering.rs @@ -0,0 +1,60 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +pub fn App(cx: Scope) -> Element { + let is_logged_in = use_state(&cx, || false); + + cx.render(rsx!(LogIn { + is_logged_in: **is_logged_in, + on_log_in: |_| is_logged_in.set(true), + on_log_out: |_| is_logged_in.set(false), + })) +} + +#[inline_props] +fn LogIn<'a>( + cx: Scope<'a>, + is_logged_in: bool, + on_log_in: EventHandler<'a>, + on_log_out: EventHandler<'a>, +) -> Element<'a> { + // ANCHOR: if_else + if *is_logged_in { + cx.render(rsx! { + div { + "Welcome!", + button { + onclick: move |_| on_log_out.call(()), + "Log Out", + } + } + }) + } else { + cx.render(rsx! { + button { + onclick: move |_| on_log_in.call(()), + "Log In", + } + }) + } + // ANCHOR_END: if_else +} + +#[inline_props] +fn LogInWarning(cx: Scope, is_logged_in: bool) -> Element { + // ANCHOR: conditional_none + if *is_logged_in { + return None; + } + + cx.render(rsx! { + a { + "You must be logged in to comment" + } + }) + // ANCHOR_END: conditional_none +} diff --git a/docs/guide/examples/dangerous_inner_html.rs b/docs/guide/examples/dangerous_inner_html.rs new file mode 100644 index 000000000..dafece034 --- /dev/null +++ b/docs/guide/examples/dangerous_inner_html.rs @@ -0,0 +1,19 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +fn App(cx: Scope) -> Element { + // ANCHOR: dangerous_inner_html + // this should come from a trusted source + let contents = "live dangerously"; + + cx.render(rsx! { + div { + dangerous_inner_html: "{contents}", + } + }) + // ANCHOR_END: dangerous_inner_html +} diff --git a/docs/guide/examples/event_click.rs b/docs/guide/examples/event_click.rs new file mode 100644 index 000000000..457873d49 --- /dev/null +++ b/docs/guide/examples/event_click.rs @@ -0,0 +1,17 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +fn App(cx: Scope) -> Element { + // ANCHOR: rsx + cx.render(rsx! { + button { + onclick: move |event| println!("Clicked! Event: {event:?}"), + "click me!" + } + }) + // ANCHOR_END: rsx +} diff --git a/docs/guide/examples/event_handler_prop.rs b/docs/guide/examples/event_handler_prop.rs new file mode 100644 index 000000000..4a9bbbb00 --- /dev/null +++ b/docs/guide/examples/event_handler_prop.rs @@ -0,0 +1,33 @@ +#![allow(non_snake_case)] + +use dioxus::events::MouseEvent; +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +fn App(cx: Scope) -> Element { + // ANCHOR: usage + cx.render(rsx! { + FancyButton { + on_click: move |event| println!("Clicked! {event:?}") + } + }) + // ANCHOR_END: usage +} + +// ANCHOR: component_with_handler +#[derive(Props)] +pub struct FancyButtonProps<'a> { + on_click: EventHandler<'a, MouseEvent>, +} + +pub fn FancyButton<'a>(cx: Scope<'a, FancyButtonProps<'a>>) -> Element<'a> { + cx.render(rsx!(button { + class: "fancy-button", + onclick: move |evt| cx.props.on_click.call(evt), + "click me pls." + })) +} +// ANCHOR_END: component_with_handler diff --git a/docs/guide/examples/event_nested.rs b/docs/guide/examples/event_nested.rs new file mode 100644 index 000000000..63096448e --- /dev/null +++ b/docs/guide/examples/event_nested.rs @@ -0,0 +1,24 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +fn App(cx: Scope) -> Element { + // ANCHOR: rsx + cx.render(rsx! { + div { + onclick: move |_event| {}, + "outer", + button { + onclick: move |event| { + // now, outer won't be triggered + event.cancel_bubble(); + }, + "inner" + } + } + }) + // ANCHOR_END: rsx +} diff --git a/docs/guide/examples/event_prevent_default.rs b/docs/guide/examples/event_prevent_default.rs new file mode 100644 index 000000000..f983400ae --- /dev/null +++ b/docs/guide/examples/event_prevent_default.rs @@ -0,0 +1,17 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +fn App(cx: Scope) -> Element { + // ANCHOR: prevent_default + cx.render(rsx! { + input { + prevent_default: "oninput", + prevent_default: "onclick", + } + }) + // ANCHOR_END: prevent_default +} diff --git a/docs/guide/examples/hello_world_desktop.rs b/docs/guide/examples/hello_world_desktop.rs new file mode 100644 index 000000000..373c1f9d6 --- /dev/null +++ b/docs/guide/examples/hello_world_desktop.rs @@ -0,0 +1,18 @@ +// ANCHOR: all +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +// ANCHOR: component +fn App(cx: Scope) -> Element { + cx.render(rsx! { + div { + "Hello, world!" + } + }) +} +// ANCHOR_END: component +// ANCHOR_END: all diff --git a/docs/guide/examples/hello_world_tui.rs b/docs/guide/examples/hello_world_tui.rs new file mode 100644 index 000000000..f16751d71 --- /dev/null +++ b/docs/guide/examples/hello_world_tui.rs @@ -0,0 +1,20 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::tui::launch(App); +} + +fn App(cx: Scope) -> Element { + cx.render(rsx! { + div { + width: "100%", + height: "10px", + background_color: "red", + justify_content: "center", + align_items: "center", + + "Hello world!" + } + }) +} diff --git a/docs/guide/examples/hello_world_tui_no_ctrl_c.rs b/docs/guide/examples/hello_world_tui_no_ctrl_c.rs new file mode 100644 index 000000000..addf43671 --- /dev/null +++ b/docs/guide/examples/hello_world_tui_no_ctrl_c.rs @@ -0,0 +1,36 @@ +// todo remove deprecated +#![allow(non_snake_case, deprecated)] + +use dioxus::events::{KeyCode, KeyboardEvent}; +use dioxus::prelude::*; +use dioxus::tui::TuiContext; + +fn main() { + dioxus::tui::launch_cfg( + App, + dioxus::tui::Config::new() + .without_ctrl_c_quit() + // Some older terminals only support 16 colors or ANSI colors + // If your terminal is one of these, change this to BaseColors or ANSI + .with_rendering_mode(dioxus::tui::RenderingMode::Rgb), + ); +} + +fn App(cx: Scope) -> Element { + let tui_ctx: TuiContext = cx.consume_context().unwrap(); + + cx.render(rsx! { + div { + width: "100%", + height: "10px", + background_color: "red", + justify_content: "center", + align_items: "center", + onkeydown: move |k: KeyboardEvent| if let KeyCode::Q = k.data.key_code { + tui_ctx.quit(); + }, + + "Hello world!" + } + }) +} diff --git a/docs/guide/examples/hello_world_web.rs b/docs/guide/examples/hello_world_web.rs new file mode 100644 index 000000000..a0547b8e5 --- /dev/null +++ b/docs/guide/examples/hello_world_web.rs @@ -0,0 +1,14 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::web::launch(App); +} + +fn App(cx: Scope) -> Element { + cx.render(rsx! { + div { + "Hello, world!" + } + }) +} diff --git a/docs/guide/examples/hooks_bad.rs b/docs/guide/examples/hooks_bad.rs new file mode 100644 index 000000000..bb4a43c26 --- /dev/null +++ b/docs/guide/examples/hooks_bad.rs @@ -0,0 +1,67 @@ +#![allow(non_snake_case)] + +use dioxus::prelude::*; +use std::collections::HashMap; + +fn main() { + dioxus::desktop::launch(App); +} + +fn App(cx: Scope) -> Element { + let you_are_happy = true; + let you_know_it = false; + + // ANCHOR: conditional + // ❌ don't call hooks in conditionals! + // We must ensure that the same hooks will be called every time + // But `if` statements only run if the conditional is true! + // So we might violate rule 2. + if you_are_happy && you_know_it { + let something = use_state(&cx, || "hands"); + println!("clap your {something}") + } + + // ✅ instead, *always* call use_state + // You can put other stuff in the conditional though + let something = use_state(&cx, || "hands"); + if you_are_happy && you_know_it { + println!("clap your {something}") + } + // ANCHOR_END: conditional + + // ANCHOR: closure + // ❌ don't call hooks inside closures! + // We can't guarantee that the closure, if used, will be called at the same time every time + let _a = || { + let b = use_state(&cx, || 0); + b.get() + }; + + // ✅ instead, move hook `b` outside + let b = use_state(&cx, || 0); + let _a = || b.get(); + // ANCHOR_END: closure + + let names: Vec<&str> = vec![]; + + // ANCHOR: loop + // `names` is a Vec<&str> + + // ❌ Do not use hooks in loops! + // In this case, if the length of the Vec changes, we break rule 2 + for _name in &names { + let is_selected = use_state(&cx, || false); + println!("selected: {is_selected}"); + } + + // ✅ Instead, use a hashmap with use_ref + let selection_map = use_ref(&cx, || HashMap::<&str, bool>::new()); + + for name in &names { + let is_selected = selection_map.read()[name]; + println!("selected: {is_selected}"); + } + // ANCHOR_END: loop + + None +} diff --git a/docs/guide/examples/hooks_composed.rs b/docs/guide/examples/hooks_composed.rs new file mode 100644 index 000000000..3e90bb2bb --- /dev/null +++ b/docs/guide/examples/hooks_composed.rs @@ -0,0 +1,13 @@ +#![allow(unused)] + +use dioxus::prelude::*; + +fn main() {} + +struct AppSettings {} + +// ANCHOR: wrap_context +fn use_settings(cx: &ScopeState) -> UseSharedState { + use_context::(&cx).expect("App settings not provided") +} +// ANCHOR_END: wrap_context diff --git a/docs/guide/examples/hooks_counter.rs b/docs/guide/examples/hooks_counter.rs new file mode 100644 index 000000000..3a858c3e8 --- /dev/null +++ b/docs/guide/examples/hooks_counter.rs @@ -0,0 +1,18 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +// ANCHOR: component +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!" } + )) +} +// ANCHOR_END: component diff --git a/docs/guide/examples/hooks_counter_two_state.rs b/docs/guide/examples/hooks_counter_two_state.rs new file mode 100644 index 000000000..5ad534b33 --- /dev/null +++ b/docs/guide/examples/hooks_counter_two_state.rs @@ -0,0 +1,24 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +// ANCHOR: component +fn App(cx: Scope) -> Element { + // ANCHOR: use_state_calls + let mut count_a = use_state(&cx, || 0); + let mut count_b = use_state(&cx, || 0); + // ANCHOR_END: use_state_calls + + cx.render(rsx!( + h1 { "Counter_a: {count_a}" } + button { onclick: move |_| count_a += 1, "a++" } + button { onclick: move |_| count_a -= 1, "a--" } + h1 { "Counter_b: {count_b}" } + button { onclick: move |_| count_b += 1, "b++" } + button { onclick: move |_| count_b -= 1, "b--" } + )) +} +// ANCHOR_END: component diff --git a/docs/guide/examples/hooks_use_ref.rs b/docs/guide/examples/hooks_use_ref.rs new file mode 100644 index 000000000..c03993561 --- /dev/null +++ b/docs/guide/examples/hooks_use_ref.rs @@ -0,0 +1,23 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +// ANCHOR: component +fn App(cx: Scope) -> Element { + let list = use_ref(&cx, || Vec::new()); + let list_formatted = format!("{:?}", *list.read()); + + cx.render(rsx!( + p { "Current list: {list_formatted}" } + button { + onclick: move |event| { + list.write().push(event) + }, + "Click me!" + } + )) +} +// ANCHOR_END: component diff --git a/docs/guide/examples/input_controlled.rs b/docs/guide/examples/input_controlled.rs new file mode 100644 index 000000000..955fe7ef5 --- /dev/null +++ b/docs/guide/examples/input_controlled.rs @@ -0,0 +1,21 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +// ANCHOR: component +fn App(cx: Scope) -> Element { + let name = use_state(&cx, || "bob".to_string()); + + cx.render(rsx! { + input { + // we tell the component what to render + value: "{name}", + // and what to do when the value changes + oninput: move |evt| name.set(evt.value.clone()), + } + }) +} +// ANCHOR_END: component diff --git a/docs/guide/examples/input_uncontrolled.rs b/docs/guide/examples/input_uncontrolled.rs new file mode 100644 index 000000000..66b77769a --- /dev/null +++ b/docs/guide/examples/input_uncontrolled.rs @@ -0,0 +1,22 @@ +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +// ANCHOR: component +fn App(cx: Scope) -> Element { + cx.render(rsx! { + form { + onsubmit: move |event| { + println!("Submitted! {event:?}") + }, + input { name: "name", }, + input { name: "age", }, + input { name: "date", }, + input { r#type: "submit", }, + } + }) +} +// ANCHOR_END: component diff --git a/docs/guide/examples/meme_editor.rs b/docs/guide/examples/meme_editor.rs new file mode 100644 index 000000000..b8b6858d3 --- /dev/null +++ b/docs/guide/examples/meme_editor.rs @@ -0,0 +1,105 @@ +// ANCHOR: all +#![allow(non_snake_case)] + +use dioxus::events::FormEvent; +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(MemeEditor); +} + +// ANCHOR: meme_editor +fn MemeEditor(cx: Scope) -> Element { + let container_style = r" + display: flex; + flex-direction: column; + gap: 16px; + margin: 0 auto; + width: fit-content; + "; + + let caption = use_state(&cx, || "me waiting for my rust code to compile".to_string()); + + cx.render(rsx! { + div { + style: "{container_style}", + h1 { "Meme Editor" }, + Meme { + caption: caption, + }, + CaptionEditor { + caption: caption, + on_input: move |event: FormEvent| {caption.set(event.value.clone());}, + }, + } + }) +} +// ANCHOR_END: meme_editor + +// ANCHOR: meme_component +#[inline_props] +fn Meme<'a>(cx: Scope<'a>, caption: &'a str) -> Element<'a> { + let container_style = r#" + position: relative; + width: fit-content; + "#; + + let caption_container_style = r#" + position: absolute; + bottom: 0; + left: 0; + right: 0; + padding: 16px 8px; + "#; + + let caption_style = r" + font-size: 32px; + margin: 0; + color: white; + text-align: center; + "; + + cx.render(rsx!( + div { + style: "{container_style}", + img { + src: "https://i.imgflip.com/2zh47r.jpg", + height: "500px", + }, + div { + style: "{caption_container_style}", + p { + style: "{caption_style}", + "{caption}" + } + } + } + )) +} +// ANCHOR_END: meme_component + +// ANCHOR: caption_editor +#[inline_props] +fn CaptionEditor<'a>( + cx: Scope<'a>, + caption: &'a str, + on_input: EventHandler<'a, FormEvent>, +) -> Element<'a> { + let input_style = r" + border: none; + background: cornflowerblue; + padding: 8px 16px; + margin: 0; + border-radius: 4px; + color: white; + "; + + cx.render(rsx!(input { + style: "{input_style}", + value: "{caption}", + oninput: move |event| on_input.call(event), + })) +} +// ANCHOR_END: caption_editor + +// ANCHOR_END: all diff --git a/docs/guide/examples/meme_editor_dark_mode.rs b/docs/guide/examples/meme_editor_dark_mode.rs new file mode 100644 index 000000000..ed7de16b8 --- /dev/null +++ b/docs/guide/examples/meme_editor_dark_mode.rs @@ -0,0 +1,184 @@ +// ANCHOR: all +#![allow(non_snake_case)] + +use dioxus::events::FormEvent; +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +// ANCHOR: DarkMode_struct +struct DarkMode(bool); +// ANCHOR_END: DarkMode_struct + +pub fn App(cx: Scope) -> Element { + // ANCHOR: context_provider + use_context_provider(&cx, || DarkMode(false)); + // ANCHOR_END: context_provider + + let is_dark_mode = use_is_dark_mode(&cx); + + let wrapper_style = if is_dark_mode { + r" + background: #222; + min-height: 100vh; + " + } else { + r"" + }; + + cx.render(rsx!(div { + style: "{wrapper_style}", + DarkModeToggle {}, + MemeEditor {}, + })) +} + +pub fn use_is_dark_mode(cx: &ScopeState) -> bool { + // ANCHOR: use_context + let dark_mode_context = use_context::(&cx); + // ANCHOR_END: use_context + + dark_mode_context + .map(|context| context.read().0) + .unwrap_or(false) +} + +// ANCHOR: toggle +pub fn DarkModeToggle(cx: Scope) -> Element { + let dark_mode = use_context::(&cx)?; + + let style = if dark_mode.read().0 { + "color:white" + } else { + "" + }; + + cx.render(rsx!(label { + style: "{style}", + "Dark Mode", + input { + r#type: "checkbox", + oninput: move |event| { + let is_enabled = event.value == "true"; + dark_mode.write().0 = is_enabled; + }, + }, + })) +} +// ANCHOR_END: toggle + +// ANCHOR: meme_editor +fn MemeEditor(cx: Scope) -> Element { + let is_dark_mode = use_is_dark_mode(&cx); + let heading_style = if is_dark_mode { "color: white" } else { "" }; + + let container_style = r" + display: flex; + flex-direction: column; + gap: 16px; + margin: 0 auto; + width: fit-content; + "; + + let caption = use_state(&cx, || "me waiting for my rust code to compile".to_string()); + + cx.render(rsx! { + div { + style: "{container_style}", + h1 { + style: "{heading_style}", + "Meme Editor" + }, + Meme { + caption: caption, + }, + CaptionEditor { + caption: caption, + on_input: move |event: FormEvent| {caption.set(event.value.clone());}, + }, + } + }) +} +// ANCHOR_END: meme_editor + +// ANCHOR: meme_component +#[inline_props] +fn Meme<'a>(cx: Scope<'a>, caption: &'a str) -> Element<'a> { + let container_style = r" + position: relative; + width: fit-content; + "; + + let caption_container_style = r" + position: absolute; + bottom: 0; + left: 0; + right: 0; + padding: 16px 8px; + "; + + let caption_style = r" + font-size: 32px; + margin: 0; + color: white; + text-align: center; + "; + + cx.render(rsx!( + div { + style: "{container_style}", + img { + src: "https://i.imgflip.com/2zh47r.jpg", + height: "500px", + }, + div { + style: "{caption_container_style}", + p { + style: "{caption_style}", + "{caption}" + } + } + } + )) +} +// ANCHOR_END: meme_component + +// ANCHOR: caption_editor +#[inline_props] +fn CaptionEditor<'a>( + cx: Scope<'a>, + caption: &'a str, + on_input: EventHandler<'a, FormEvent>, +) -> Element<'a> { + let is_dark_mode = use_is_dark_mode(&cx); + + let colors = if is_dark_mode { + r" + background: cornflowerblue; + color: white; + " + } else { + r" + background: #def; + color: black; + " + }; + + let input_style = r" + border: none; + padding: 8px 16px; + margin: 0; + border-radius: 4px; + "; + + cx.render(rsx!(input { + style: "{input_style}{colors}", + value: "{caption}", + oninput: move |event| on_input.call(event), + })) +} +// ANCHOR_END: caption_editor + +// ANCHOR_END: all diff --git a/docs/guide/examples/rendering_lists.rs b/docs/guide/examples/rendering_lists.rs new file mode 100644 index 000000000..49fd2b7e2 --- /dev/null +++ b/docs/guide/examples/rendering_lists.rs @@ -0,0 +1,60 @@ +#![allow(non_snake_case)] + +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +#[derive(PartialEq, Clone)] +struct Comment { + content: String, + id: usize, +} + +pub fn App(cx: Scope) -> Element { + // ANCHOR: render_list + let comment_field = use_state(&cx, || String::new()); + let mut next_id = use_state(&cx, || 0); + let comments = use_ref(&cx, || Vec::::new()); + + let comments_lock = comments.read(); + let comments_rendered = comments_lock.iter().map(|comment| { + cx.render(rsx!(CommentComponent { + key: "{comment.id}", + comment: comment.clone(), + })) + }); + + cx.render(rsx!( + form { + onsubmit: move |_| { + comments.write().push(Comment { + content: comment_field.get().clone(), + id: *next_id.get(), + }); + next_id += 1; + + comment_field.set(String::new()); + }, + input { + value: "{comment_field}", + oninput: |event| comment_field.set(event.value.clone()), + } + input { + r#type: "submit", + } + }, + comments_rendered, + )) + // ANCHOR_END: render_list +} + +#[inline_props] +fn CommentComponent(cx: Scope, comment: Comment) -> Element { + cx.render(rsx!(div { + "Comment by anon:", + p { "{comment.content}" } + button { "Reply" }, + })) +} diff --git a/docs/guide/examples/rsx_overview.rs b/docs/guide/examples/rsx_overview.rs new file mode 100644 index 000000000..124cf6ebc --- /dev/null +++ b/docs/guide/examples/rsx_overview.rs @@ -0,0 +1,109 @@ +#![allow(non_snake_case)] + +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +pub fn App(cx: Scope) -> Element { + cx.render(rsx!( + Empty {}, + Children {}, + Fragments {}, + Attributes {}, + VariableAttributes {}, + CustomAttributes {}, + Formatting {}, + Expression {}, + )) +} + +pub fn Empty(cx: Scope) -> Element { + // ANCHOR: empty + cx.render(rsx!(div {})) + // ANCHOR_END: empty +} + +pub fn Children(cx: Scope) -> Element { + // ANCHOR: children + cx.render(rsx!(ol { + li {"First Item"} + li {"Second Item"} + li {"Third Item"} + })) + // ANCHOR_END: children +} + +pub fn Fragments(cx: Scope) -> Element { + // ANCHOR: fragments + cx.render(rsx!( + p {"First Item"}, + p {"Second Item"}, + Fragment { + span { "a group" }, + span { "of three" }, + span { "items" }, + } + )) + // ANCHOR_END: fragments +} + +pub fn Attributes(cx: Scope) -> Element { + // ANCHOR: attributes + cx.render(rsx!(a { + href: "https://www.youtube.com/watch?v=dQw4w9WgXcQ", + class: "primary_button", + "Log In" + })) + // ANCHOR_END: attributes +} + +pub fn VariableAttributes(cx: Scope) -> Element { + // ANCHOR: variable_attributes + let written_in_rust = true; + let button_type = "button"; + cx.render(rsx!(button { + disabled: "{written_in_rust}", + class: "{button_type}", + "Rewrite it in rust" + })) + // ANCHOR_END: variable_attributes +} + +pub fn CustomAttributes(cx: Scope) -> Element { + // ANCHOR: custom_attributes + cx.render(rsx!(b { + "customAttribute": "value", + "Rust is Cool" + })) + // ANCHOR_END: custom_attributes +} + +pub fn Formatting(cx: Scope) -> Element { + // ANCHOR: formatting + let coordinates = (42, 0); + let country = "es"; + cx.render(rsx!(div { + class: "country-{country}", + "Coordinates: {coordinates:?}", + // arbitrary expressions are allowed, + // as long as they don't contain `{}` + div { + "{country.to_uppercase()}" + }, + div { + "{7*6}" + }, + })) + // ANCHOR_END: formatting +} + +pub fn Expression(cx: Scope) -> Element { + // ANCHOR: expression + let text = "Dioxus"; + cx.render(rsx!(span { + [text.to_uppercase()] + })) + // ANCHOR_END: expression +} diff --git a/docs/guide/examples/spawn.rs b/docs/guide/examples/spawn.rs new file mode 100644 index 000000000..17dd259f7 --- /dev/null +++ b/docs/guide/examples/spawn.rs @@ -0,0 +1,84 @@ +#![allow(non_snake_case, unused)] + +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +fn App(cx: Scope) -> Element { + // ANCHOR: spawn + let logged_in = use_state(&cx, || false); + + let log_in = move |_| { + cx.spawn({ + let logged_in = logged_in.to_owned(); + + async move { + let resp = reqwest::Client::new() + .post("http://example.com/login") + .send() + .await; + + match resp { + Ok(_data) => { + println!("Login successful!"); + logged_in.set(true); + } + Err(_err) => { + println!( + "Login failed - you need a login server running on localhost:8080." + ) + } + } + } + }); + }; + + cx.render(rsx! { + button { + onclick: log_in, + "Login", + } + }) + // ANCHOR_END: spawn +} + +pub fn Tokio(cx: Scope) -> Element { + let _ = || { + // ANCHOR: tokio + cx.spawn(async { + let _ = tokio::spawn(async {}).await; + + let _ = tokio::task::spawn_local(async { + // some !Send work + }) + .await; + }); + // ANCHOR_END: tokio + }; + + None +} + +pub fn ToOwnedMacro(cx: Scope) -> Element { + let count = use_state(&cx, || 0); + let age = use_state(&cx, || 0); + let name = use_state(&cx, || 0); + let description = use_state(&cx, || 0); + + let _ = || { + // ANCHOR: to_owned_macro + use dioxus::core::to_owned; + + cx.spawn({ + to_owned![count, age, name, description]; + async move { + // ... + } + }); + // ANCHOR_END: to_owned_macro + }; + + None +} diff --git a/docs/guide/examples/use_future.rs b/docs/guide/examples/use_future.rs new file mode 100644 index 000000000..da52f8c63 --- /dev/null +++ b/docs/guide/examples/use_future.rs @@ -0,0 +1,60 @@ +#![allow(non_snake_case, unused)] + +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +#[derive(serde::Deserialize, Debug)] +struct ApiResponse { + #[serde(rename = "message")] + image_url: String, +} + +fn App(cx: Scope) -> Element { + // ANCHOR: use_future + let future = use_future(&cx, (), |_| async move { + reqwest::get("https://dog.ceo/api/breeds/image/random") + .await + .unwrap() + .json::() + .await + }); + // ANCHOR_END: use_future + + // ANCHOR: render + cx.render(match future.value() { + Some(Ok(response)) => rsx! { + button { + onclick: move |_| future.restart(), + "Click to fetch another doggo" + } + div { + img { + max_width: "500px", + max_height: "500px", + src: "{response.image_url}", + } + } + }, + Some(Err(_)) => rsx! { div { "Loading dogs failed" } }, + None => rsx! { div { "Loading dogs..." } }, + }) + // ANCHOR_END: render +} + +#[inline_props] +fn RandomDog(cx: Scope, breed: String) -> Element { + // ANCHOR: dependency + let future = use_future(&cx, (breed,), |(breed,)| async move { + reqwest::get(format!("https://dog.ceo/api/breed/{breed}/images/random")) + .await + .unwrap() + .json::() + .await + }); + // ANCHOR_END: dependency + + None +} diff --git a/docs/guide/src/README.md b/docs/guide/src/README.md deleted file mode 100644 index 778cabe4a..000000000 --- a/docs/guide/src/README.md +++ /dev/null @@ -1,105 +0,0 @@ -# Introduction - -![dioxuslogo](./images/dioxuslogo_full.png) - -**Dioxus** is a library for building fast, scalable, and robust user interfaces with the Rust programming language. This guide will help you get started with Dioxus running on the Web, Desktop, Mobile, and more. - -```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!" } - )) -}; -``` - -In general, Dioxus and React share many functional similarities. If this guide is lacking in any general concept or an error message is confusing, React's documentation might be more helpful. We are dedicated to providing a *familiar* toolkit for UI in Rust, so we've chosen to follow in the footsteps of popular UI frameworks (React, Redux, etc). If you know React, then you already know Dioxus. If you don't know either, this guide will still help you! - -> This is an introduction book! For advanced topics, check out the [Reference](/reference) instead. - -## Multiplatform - -Dioxus is a *portable* toolkit, meaning the Core implementation can run anywhere with no platform-dependent linking. Unlike many other Rust frontend toolkits, Dioxus is not intrinsically linked to WebSys. In fact, every element and event listener can be swapped out at compile time. By default, Dioxus ships with the `html` feature enabled, but this can be disabled depending on your target renderer. - -Right now, we have several 1st-party renderers: -- WebSys (for WASM) -- Tao/Tokio (for Desktop apps) -- Tao/Tokio (for Mobile apps) -- SSR (for generating static markup) -- TUI/Rink (for terminal-based apps) - -### Web Support ---- -The Web is the best-supported target platform for Dioxus. To run on the Web, your app must be compiled to WebAssembly and depend on the `dioxus` crate with the `web` feature enabled. Because of the limitations of Wasm not every crate will work with your web-apps, so you'll need to make sure that your crates work without native system calls (timers, IO, etc). - -Because the web is a fairly mature platform, we expect there to be very little API churn for web-based features. - -[Jump to the getting started guide for the web.](/reference/platforms/web) - -Examples: -- [TodoMVC](https://github.com/DioxusLabs/example-projects/tree/master/todomvc) -- [ECommerce](https://github.com/DioxusLabs/example-projects/tree/master/ecommerce-site) - -[![TodoMVC example](https://github.com/DioxusLabs/example-projects/raw/master/todomvc/example.png)](https://github.com/DioxusLabs/example-projects/blob/master/todomvc) - -### SSR Support ---- -Dioxus supports server-side rendering! - -For rendering statically to an `.html` file or from a WebServer, then you'll want to make sure the `ssr` feature is enabled in the `dioxus` crate and use the `dioxus::ssr` API. We don't expect the SSR API to change drastically in the future. - -```rust -let contents = dioxus::ssr::render_vdom(&dom); -``` - -[Jump to the getting started guide for SSR.](/reference/platforms/ssr) - -Examples: -- [Example DocSite](https://github.com/dioxusLabs/docsite) -- [Tide WebServer]() -- [Markdown to fancy HTML generator]() - -### Desktop Support ---- -The desktop is a powerful target for Dioxus, but is currently limited in capability when compared to the Web platform. Currently, desktop apps are rendered with the platform's WebView library, but your Rust code is running natively on a native thread. This means that browser APIs are *not* available, so rendering WebGL, Canvas, etc is not as easy as the Web. However, native system APIs *are* accessible, so streaming, WebSockets, filesystem, etc are all viable APIs. In the future, we plan to move to a custom webrenderer-based DOM renderer with WGPU integrations. - -Desktop APIs will likely be in flux as we figure out better patterns than our ElectronJS counterpart. - -[Jump to the getting started guide for Desktop.](/reference/platforms/desktop) - -Examples: -- [File explorer](https://github.com/DioxusLabs/example-projects/blob/master/file-explorer) -- [WiFi scanner](https://github.com/DioxusLabs/example-projects/blob/master/wifi-scanner) - -[![File ExplorerExample](https://raw.githubusercontent.com/DioxusLabs/example-projects/master/file-explorer/image.png)](https://github.com/DioxusLabs/example-projects/tree/master/file-explorer) - -### Mobile Support ---- -Mobile is currently the least-supported renderer target for Dioxus. Mobile apps are rendered with the platform's WebView, meaning that animations, transparency, and native widgets are not currently achievable. In addition, iOS is the only supported Mobile Platform. It is possible to get Dioxus running on Android and rendered with WebView, but the Rust windowing library that Dioxus uses - tao - does not currently supported Android. - -Mobile support is currently best suited for CRUD-style apps, ideally for internal teams who need to develop quickly but don't care much about animations or native widgets. - -[Jump to the getting started guide for Mobile.](/reference/platforms/mobile) - -Examples: -- [Todo App](https://github.com/DioxusLabs/example-projects/blob/master/ios_demo) - -### LiveView / Server Component Support ---- - -The internal architecture of Dioxus was designed from day one to support the `LiveView` use-case, where a web server hosts a running app for each connected user. As of today, there is no first-class LiveView support - you'll need to wire this up yourself. - -While not currently fully implemented, the expectation is that LiveView apps can be a hybrid between Wasm and server-rendered where only portions of a page are "live" and the rest of the page is either server-rendered, statically generated, or handled by the host SPA. - -### Multithreaded Support ---- -The Dioxus VirtualDom, sadly, is not currently `Send`. Internally, we use quite a bit of interior mutability which is not thread-safe. This means you can't easily use Dioxus with most web frameworks like Tide, Rocket, Axum, etc. - -To solve this, you'll want to spawn a VirtualDom on its own thread and communicate with it via channels. - -When working with web frameworks that require `Send`, it is possible to render a VirtualDom immediately to a String - but you cannot hold the VirtualDom across an await point. For retained-state SSR (essentially LiveView), you'll need to create a pool of VirtualDoms. - -Ultimately, you can always wrap the VirtualDom with a `Send` type and manually uphold the `Send` guarantees yourself. diff --git a/docs/guide/src/SUMMARY.md b/docs/guide/src/SUMMARY.md index 12a0b60cf..92836297b 100644 --- a/docs/guide/src/SUMMARY.md +++ b/docs/guide/src/SUMMARY.md @@ -1,54 +1,43 @@ # Summary -- [Introduction](README.md) -- [Roadmap](ROADMAP.md) -- [Getting Set Up](setup.md) -- [Hello, World!](hello_world.md) -- [Describing the UI](elements/index.md) - - [Intro to Elements](elements/vnodes.md) - - [Conditional Rendering](elements/conditional_rendering.md) - - [Lists](elements/lists.md) - - [Special Attributes](elements/special_attributes.md) -- [Components](components/index.md) - - [Properties](components/propsmacro.md) - - [Reusing, Importing, and Exporting](components/exporting_components.md) - - [Children and Attributes](components/component_children.md) - - [How Data Flows](components/composing.md) -- [Adding Interactivity](interactivity/index.md) +[Introduction](index.md) + +- [Getting Started](getting_started/index.md) + - [Desktop](getting_started/desktop.md) + - [Web](getting_started/web.md) + - [Hot Reload](getting_started/hot_reload.md) + - [Server-Side Rendering](getting_started/ssr.md) + - [Terminal UI](getting_started/tui.md) + - [Mobile](getting_started/mobile.md) +- [Describing the UI](describing_ui/index.md) + - [Special Attributes](describing_ui/special_attributes.md) + - [Components](describing_ui/components.md) + - [Props](describing_ui/component_props.md) + - [Component Children](describing_ui/component_children.md) +- [Interactivity](interactivity/index.md) - [Event Listeners](interactivity/event_handlers.md) - - [Hooks](interactivity/hooks.md) - - [UseState](interactivity/usestate.md) - - [UseRef](interactivity/useref.md) + - [Hooks & Component State](interactivity/hooks.md) - [User Input](interactivity/user_input.md) - -- [Managing State](state/index.md) - - [Local State](state/localstate.md) - - [Global State](state/sharedstate.md) - - [Lifting State](state/liftingstate.md) - - [Error handling](state/errorhandling.md) -- [Helper Crates](helpers/index.md) - - [Fermi](state/fermi.md) - - [Router](state/router.md) -- [Working with Async](async/index.md) + - [Sharing State](interactivity/sharing_state.md) + - [Custom Hooks](interactivity/custom_hooks.md) + - [Dynamic Rendering](interactivity/dynamic_rendering.md) + - [Routing](interactivity/router.md) +- [Async](async/index.md) - [UseFuture](async/use_future.md) - - [UseCoroutine](async/coroutines.md) - - [Updating State](async/loading_state.md) - - [Tasks](async/asynctasks.md) - - - - -- [Next Steps and Advanced Topics](final.md) - + - [UseCoroutine](async/use_coroutine.md) + - [Spawning Futures](async/spawn.md) +- [Best Practices](best_practices/index.md) + - [Error Handling](best_practices/error_handling.md) + - [Antipatterns](best_practices/antipatterns.md) +- [Publishing](publishing/index.md) + - [Desktop](publishing/desktop.md) + - [Web](publishing/web.md) ----------- -[Contributors](misc/contributors.md) +- [Custom Renderer](custom_renderer/index.md) +----------- - - - +[Roadmap](roadmap.md) +[Contributing](contributing.md) diff --git a/docs/guide/src/__unused/README.md b/docs/guide/src/__unused/README.md new file mode 100644 index 000000000..0a3583ef1 --- /dev/null +++ b/docs/guide/src/__unused/README.md @@ -0,0 +1,6 @@ +This directory includes: + +- Very outdated docs +- Docs for features which haven't been implemented (yet?) +- Information which has already been covered in the guide in a more organized fashion +- A few things yet to be integrated into the guide nicely \ No newline at end of file diff --git a/docs/guide/src/advanced-guides/06-subscription-api.md b/docs/guide/src/__unused/advanced-guides/06-subscription-api.md similarity index 100% rename from docs/guide/src/advanced-guides/06-subscription-api.md rename to docs/guide/src/__unused/advanced-guides/06-subscription-api.md diff --git a/docs/guide/src/advanced-guides/10-concurrent-mode.md b/docs/guide/src/__unused/advanced-guides/10-concurrent-mode.md similarity index 100% rename from docs/guide/src/advanced-guides/10-concurrent-mode.md rename to docs/guide/src/__unused/advanced-guides/10-concurrent-mode.md diff --git a/docs/guide/src/advanced-guides/11-arena-memo.md b/docs/guide/src/__unused/advanced-guides/11-arena-memo.md similarity index 87% rename from docs/guide/src/advanced-guides/11-arena-memo.md rename to docs/guide/src/__unused/advanced-guides/11-arena-memo.md index d5eaaa1d0..0c98fc255 100644 --- a/docs/guide/src/advanced-guides/11-arena-memo.md +++ b/docs/guide/src/__unused/advanced-guides/11-arena-memo.md @@ -2,9 +2,9 @@ Dioxus differs slightly from other UI virtual doms in some subtle ways due to its memory allocator. -One important aspect to understand is how props are passed down from parent components to children. All "components" (custom user-made UI elements) are tightly allocated together in an arena. However, because props and hooks are generically typed, they are casted to `Any` and allocated on the heap - not in the arena with the components. +One important aspect to understand is how props are passed down from parent components to children. All "components" (custom user-made UI elements) are tightly allocated together in an arena. However, because props and hooks are generically typed, they are casted to `Any` and allocated on the heap – not in the arena with the components. -With this system, we try to be more efficient when leaving the component arena and entering the heap. By default, props are memoized between renders using COW and context. This makes props comparisons fast - done via ptr comparisons on the cow pointer. Because memoization is done by default, parent re-renders will _not_ cascade to children if the child's props did not change. +With this system, we try to be more efficient when leaving the component arena and entering the heap. By default, props are memoized between renders using COW and context. This makes props comparisons fast – done via ptr comparisons on the cow pointer. Because memoization is done by default, parent re-renders will _not_ cascade to children if the child's props did not change. https://dmitripavlutin.com/use-react-memo-wisely/ diff --git a/docs/guide/src/advanced-guides/12-signals.md b/docs/guide/src/__unused/advanced-guides/12-signals.md similarity index 87% rename from docs/guide/src/advanced-guides/12-signals.md rename to docs/guide/src/__unused/advanced-guides/12-signals.md index cae2e1726..aa20d43ee 100644 --- a/docs/guide/src/advanced-guides/12-signals.md +++ b/docs/guide/src/__unused/advanced-guides/12-signals.md @@ -22,7 +22,7 @@ fn Comp(cx: Scope) -> DomTree { } ``` -This component is fairly straightforward - the input updates its own value on every change. However, every call to set_title will re-render the component. If we add a large list, then every time we update the title input, Dioxus will need to diff the entire list, over, and over, and over. This is **a lot** of wasted clock-cycles! +This component is fairly straightforward – the input updates its own value on every change. However, every call to set_title will re-render the component. If we add a large list, then every time we update the title input, Dioxus will need to diff the entire list, over, and over, and over. This is **a lot** of wasted clock-cycles! ```rust fn Comp(cx: Scope) -> DomTree { @@ -43,7 +43,7 @@ fn Comp(cx: Scope) -> DomTree { } ``` -Many experienced React developers will just say "this is bad design" - but we consider it to be a pit of failure, rather than a pit of success! That's why signals exist - to push you in a more performant (and ergonomic) direction. Signals let us directly bind values to their final place in the VirtualDOM. Whenever the signal value is updated, Dioxus will only the DOM nodes where that signal is used. Signals are built into Dioxus, so we can directly bind attributes of elements to their updates. +Many experienced React developers will just say "this is bad design" – but we consider it to be a pit of failure, rather than a pit of success! That's why signals exist – to push you in a more performant (and ergonomic) direction. Signals let us directly bind values to their final place in the VirtualDOM. Whenever the signal value is updated, Dioxus will only the DOM nodes where that signal is used. Signals are built into Dioxus, so we can directly bind attributes of elements to their updates. We can use signals to generate a two-way binding between data and the input box. Our text input is now just a two-line component! @@ -124,7 +124,7 @@ If you build a complex app on top of Dirac, you'll likely notice that many of yo ## Signals and Iterators -Sometimes you want to use a collection of items. With Signals, you can bypass diffing for collections - a very powerful technique to avoid re-rendering on large collections. +Sometimes you want to use a collection of items. With Signals, you can bypass diffing for collections – a very powerful technique to avoid re-rendering on large collections. By default, Dioxus is limited when you use iter/map. With the `For` component, you can provide an iterator and a function for the iterator to map to. diff --git a/docs/guide/src/advanced-guides/13-subtrees.md b/docs/guide/src/__unused/advanced-guides/13-subtrees.md similarity index 76% rename from docs/guide/src/advanced-guides/13-subtrees.md rename to docs/guide/src/__unused/advanced-guides/13-subtrees.md index 7c99ecf4f..0108186eb 100644 --- a/docs/guide/src/advanced-guides/13-subtrees.md +++ b/docs/guide/src/__unused/advanced-guides/13-subtrees.md @@ -16,7 +16,7 @@ Root The goal of this functionality is to enable things like Portals, Windows, and inline alternative renderers without needing to spin up a new VirtualDom. -With the right renderer plugins, a subtree could be rendered as anything - a 3D scene, SVG, or even as the contents of a new window or modal. This functionality is similar to "Portals" in React, but much more "renderer agnostic." Portals, by nature, are not necessarily cross-platform and rely on renderer functionality, so it makes sense to abstract their purpose into the subtree concept. +With the right renderer plugins, a subtree could be rendered as anything – a 3D scene, SVG, or even as the contents of a new window or modal. This functionality is similar to "Portals" in React, but much more "renderer agnostic." Portals, by nature, are not necessarily cross-platform and rely on renderer functionality, so it makes sense to abstract their purpose into the subtree concept. The desktop renderer comes pre-loaded with the window and notification subtree plugins, making it possible to render subtrees into entirely different windows. @@ -25,7 +25,7 @@ Subtrees also solve the "bridging" issues in React where two different renderers ## API -Due to their importance in the hierarchy, Components - not nodes - are treated as subtree roots. +Due to their importance in the hierarchy, Components – not nodes – are treated as subtree roots. ```rust diff --git a/docs/guide/src/advanced-guides/custom-renderer.md b/docs/guide/src/__unused/advanced-guides/custom-renderer.md similarity index 92% rename from docs/guide/src/advanced-guides/custom-renderer.md rename to docs/guide/src/__unused/advanced-guides/custom-renderer.md index a8bec614c..194fff54a 100644 --- a/docs/guide/src/advanced-guides/custom-renderer.md +++ b/docs/guide/src/__unused/advanced-guides/custom-renderer.md @@ -54,7 +54,7 @@ The Dioxus diffing mechanism operates as a [stack machine](https://en.wikipedia. ### An example -For the sake of understanding, lets consider this example - a very simple UI declaration: +For the sake of understanding, lets consider this example – a very simple UI declaration: ```rust rsx!( h1 {"hello world"} ) @@ -218,7 +218,7 @@ fn virtual_event_from_websys_event(event: &web_sys::Event) -> VirtualEvent { ## Custom raw elements -If you need to go as far as relying on custom elements for your renderer - you totally can. This still enables you to use Dioxus' reactive nature, component system, shared state, and other features, but will ultimately generate different nodes. All attributes and listeners for the HTML and SVG namespace are shuttled through helper structs that essentially compile away (pose no runtime overhead). You can drop in your own elements any time you want, with little hassle. However, you must be absolutely sure your renderer can handle the new type, or it will crash and burn. +If you need to go as far as relying on custom elements for your renderer – you totally can. This still enables you to use Dioxus' reactive nature, component system, shared state, and other features, but will ultimately generate different nodes. All attributes and listeners for the HTML and SVG namespace are shuttled through helper structs that essentially compile away (pose no runtime overhead). You can drop in your own elements any time you want, with little hassle. However, you must be absolutely sure your renderer can handle the new type, or it will crash and burn. These custom elements are defined as unit structs with trait implementations. @@ -248,7 +248,7 @@ There are three opportunities for platform incompatibilities to break your progr 2. When downcasting events via `Event.downcast_ref()` 3. Calling platform-specific APIs that don't exist -The best hooks will properly detect the target platform and still provide functionality, failing gracefully when a platform is not supported. We encourage - and provide - an indication to the user on what platforms a hook supports. For issues 1 and 2, these return a result as to not cause panics on unsupported platforms. When designing your hooks, we recommend propagating this error upwards into user facing code, making it obvious that this particular service is not supported. +The best hooks will properly detect the target platform and still provide functionality, failing gracefully when a platform is not supported. We encourage – and provide – an indication to the user on what platforms a hook supports. For issues 1 and 2, these return a result as to not cause panics on unsupported platforms. When designing your hooks, we recommend propagating this error upwards into user facing code, making it obvious that this particular service is not supported. This particular code _will panic_ due to the unwrap on downcast_ref. Try to avoid these types of patterns. diff --git a/docs/guide/src/advanced-guides/liveview.md b/docs/guide/src/__unused/advanced-guides/liveview.md similarity index 88% rename from docs/guide/src/advanced-guides/liveview.md rename to docs/guide/src/__unused/advanced-guides/liveview.md index ccb7182aa..e223c593e 100644 --- a/docs/guide/src/advanced-guides/liveview.md +++ b/docs/guide/src/__unused/advanced-guides/liveview.md @@ -11,7 +11,7 @@ Because Liveview combines the server and the client, you'll find dedicated APIs You can find more information to data modeling and fetching for LiveApps in the "Book of Dioxus Patterns". ### Ease of deployment -There is no hassle for deploying Dioxus liveview apps - simply upload the binary to your hosting provider of choice. There simply is no need to deal with intermediate APIs. An app's frontend and backend are tightly coupled to each other, meaning that the backed and frontend are always up to date. +There is no hassle for deploying Dioxus liveview apps – simply upload the binary to your hosting provider of choice. There simply is no need to deal with intermediate APIs. An app's frontend and backend are tightly coupled to each other, meaning that the backed and frontend are always up to date. This is especially powerful for small teams, where fast iteration, versioned unique prototypes, and simple deployments are important. As your app grows, Dioxus will happily grow with you, serving up to 100K RPS (thanks to async Rust performance). diff --git a/docs/guide/src/advanced-guides/rsx.md b/docs/guide/src/__unused/advanced-guides/rsx.md similarity index 74% rename from docs/guide/src/advanced-guides/rsx.md rename to docs/guide/src/__unused/advanced-guides/rsx.md index 8f7728f35..062246490 100644 --- a/docs/guide/src/advanced-guides/rsx.md +++ b/docs/guide/src/__unused/advanced-guides/rsx.md @@ -2,7 +2,7 @@ Many modern frameworks provide a domain-specific-language for declaring user-interfaces. In the case of React, this language extension is called JSX and must be handled through additional dependencies and pre/post processors to transform your source code. With Rust, we can simply provide a procedural macro in the Dioxus dependency itself that mimics the JSX language. -With Dioxus, we actually ship two different macros - a macro that mimics JSX (the `html!` macro) and a macro that mimics Rust's native nested-struct syntax (the `rsx!` macro). These macros simply transform their inputs into NodeFactory calls. +With Dioxus, we actually ship two different macros – a macro that mimics JSX (the `html!` macro) and a macro that mimics Rust's native nested-struct syntax (the `rsx!` macro). These macros simply transform their inputs into NodeFactory calls. For instance, this html! call: ```rust @@ -18,7 +18,7 @@ becomes this NodeFactory call: None // key ) ``` -The NodeFactory API is fairly ergonomic, making it a viable option to use directly. The NodeFactory API is also compile-time correct and has incredible syntax highlighting support. We use what Rust calls a "unit type" - the `dioxus_elements::div` and associated methods to ensure that a `div` can only have attributes associated with `div`s. This lets us tack on relevant documentation, autocomplete support, and jump-to-definition for methods and attributes. +The NodeFactory API is fairly ergonomic, making it a viable option to use directly. The NodeFactory API is also compile-time correct and has incredible syntax highlighting support. We use what Rust calls a "unit type" – the `dioxus_elements::div` and associated methods to ensure that a `div` can only have attributes associated with `div`s. This lets us tack on relevant documentation, autocomplete support, and jump-to-definition for methods and attributes. ![Compile time correct syntax](../images/compiletimecorrect.png) @@ -26,7 +26,7 @@ The NodeFactory API is fairly ergonomic, making it a viable option to use direct The html! macro supports a limited subset of the html standard. Rust's macro parsing tools are somewhat limited, so all text between tags _must be quoted_. -However, writing HTML by hand is a bit tedious - IDE tools for Rust don't support linting/autocomplete/syntax highlighting. We suggest using RSX - it's more natural for Rust programs and _does_ integrate well with Rust IDE tools. +However, writing HTML by hand is a bit tedious – IDE tools for Rust don't support linting/autocomplete/syntax highlighting. We suggest using RSX – it's more natural for Rust programs and _does_ integrate well with Rust IDE tools. ```rust let name = "jane"; diff --git a/docs/guide/src/advanced-guides/testing.md b/docs/guide/src/__unused/advanced-guides/testing.md similarity index 97% rename from docs/guide/src/advanced-guides/testing.md rename to docs/guide/src/__unused/advanced-guides/testing.md index dc53feafd..2f0f97b67 100644 --- a/docs/guide/src/advanced-guides/testing.md +++ b/docs/guide/src/__unused/advanced-guides/testing.md @@ -21,7 +21,7 @@ fn runs_in_browser() { Then, when you run ```console -$ dioxus test --chrome +dioxus test --chrome ``` Dioxus will build and test your code using the Chrome browser as a harness. diff --git a/docs/guide/src/__unused/attribute_spreading.md b/docs/guide/src/__unused/attribute_spreading.md new file mode 100644 index 000000000..fcf799f3d --- /dev/null +++ b/docs/guide/src/__unused/attribute_spreading.md @@ -0,0 +1,29 @@ +In the cases where you need to pass arbitrary element properties into a component – say to add more functionality to the `` tag, Dioxus will accept any quoted fields. This is similar to adding arbitrary fields to regular elements using quotes. + +```rust + +rsx!( + Clickable { + "class": "blue-button", + "style": "background: red;" + } +) + +``` + +For a component to accept these attributes, you must add an `attributes` field to your component's properties. We can use the spread syntax to add these attributes to whatever nodes are in our component. + +```rust +#[derive(Props)] +struct ClickableProps<'a> { + attributes: Attributes<'a> +} + +fn clickable(cx: Scope>) -> Element { + cx.render(rsx!( + a { + ..cx.props.attributes, + "Any link, anywhere" + } + )) +} \ No newline at end of file diff --git a/docs/guide/src/components/composing.md b/docs/guide/src/__unused/composing.md similarity index 98% rename from docs/guide/src/components/composing.md rename to docs/guide/src/__unused/composing.md index 85cf424a3..5746d6477 100644 --- a/docs/guide/src/components/composing.md +++ b/docs/guide/src/__unused/composing.md @@ -15,7 +15,7 @@ This section is a bit long, but worth the read. We recommend coffee, tea, and/or ## Reactive Programming -Dioxus is one of a handful of Rust libraries that provide a "Reactive Programming Model". The term "Reactive programming" is a classification of programming paradigm - much like functional or imperative programming. This is a very important distinction since it affects how we *think* about our code. +Dioxus is one of a handful of Rust libraries that provide a "Reactive Programming Model". The term "Reactive programming" is a classification of programming paradigm – much like functional or imperative programming. This is a very important distinction since it affects how we *think* about our code. Reactive programming is a programming model concerned with deriving computations from asynchronous data flow. Most reactive programs are comprised of datasources, intermediate computations, and a final result. diff --git a/docs/guide/src/__unused/event_javascript.rs b/docs/guide/src/__unused/event_javascript.rs new file mode 100644 index 000000000..2b0a60340 --- /dev/null +++ b/docs/guide/src/__unused/event_javascript.rs @@ -0,0 +1,26 @@ + +## JavaScript Handlers + +Instead of passing a closure, you can also pass a string to event handlers – this lets you use JavaScript (if your renderer can execute JavaScript): + +```rust +{{#include ../../examples/event_javascript.rs:rsx}} +``` + + +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App); +} + +fn App(cx: Scope) -> Element { + cx.render(rsx! { + // ANCHOR: rsx + div { + onclick: "alert('hello world')", + } + // ANCHOR_END: rsx + }) +} diff --git a/docs/guide/src/state/fanout.md b/docs/guide/src/__unused/fanout.md similarity index 79% rename from docs/guide/src/state/fanout.md rename to docs/guide/src/__unused/fanout.md index 37807401b..087d4b543 100644 --- a/docs/guide/src/state/fanout.md +++ b/docs/guide/src/__unused/fanout.md @@ -35,7 +35,7 @@ fn Titlebar(cx: Scope) -> Element { } ``` -For many apps - this is a fine pattern, especially if the component is a one-off. However, if we want to reuse the component outside of this app, then we'll start to run into issues where our contexts are unavailable. +For many apps – this is a fine pattern, especially if the component is a one-off. However, if we want to reuse the component outside of this app, then we'll start to run into issues where our contexts are unavailable. ## Fanning Out @@ -58,4 +58,4 @@ fn DocsiteTitlesection(cx: Scope) { This particular wrapper component unfortunately cannot be reused across apps. However, because it simply wraps other real elements, it doesn't have to. We are free to reuse our TitleBar and UserBar components across apps with ease. We also know that this particular component is plenty performant because the wrapper doesn't have any props and is always memoized. The only times this component re-renders is when any of the atoms change. -This is the beauty of Dioxus - we always know where our components are likely to be re-rendered. Our wrapper components can easily prevent any large re-renders by simply memoizing their components. This system might not be as elegant or precise as signal systems found in libraries like Sycamore or SolidJS, but it is quite ergonomic. +This is the beauty of Dioxus – we always know where our components are likely to be re-rendered. Our wrapper components can easily prevent any large re-renders by simply memoizing their components. This system might not be as elegant or precise as signal systems found in libraries like Sycamore or SolidJS, but it is quite ergonomic. diff --git a/docs/guide/src/__unused/hello_world.md b/docs/guide/src/__unused/hello_world.md new file mode 100644 index 000000000..d49172e47 --- /dev/null +++ b/docs/guide/src/__unused/hello_world.md @@ -0,0 +1,14 @@ +# "Hello, World" desktop app + + + +If you plan to develop extensions for the `Dioxus` ecosystem, please use the `dioxus` crate with the `core` feature to limit the amount of dependencies your project brings in. + + +### What is this `Scope` object? + +Coming from React, the `Scope` object might be confusing. In React, you'll want to store data between renders with hooks. However, hooks rely on global variables which make them difficult to integrate in multi-tenant systems like server-rendering. + +In Dioxus, you are given an explicit `Scope` object to control how the component renders and stores data. The `Scope` object provides a handful of useful APIs for features like suspense, rendering, and more. + +For now, just know that `Scope` lets you store state with hooks and render elements with `cx.render`. diff --git a/docs/guide/src/helpers/index.md b/docs/guide/src/__unused/helpers.md similarity index 93% rename from docs/guide/src/helpers/index.md rename to docs/guide/src/__unused/helpers.md index 0a6858446..86c76bea8 100644 --- a/docs/guide/src/helpers/index.md +++ b/docs/guide/src/__unused/helpers.md @@ -18,27 +18,27 @@ Global state as easy as `use_state`. This crate has yet to be developed! However, we do plan on providing a crate for good fetching and query support. -## 3rd-party - Toast +## 3rd-party – Toast Toast notifications, curtesy of [@mrxiaozhuox](https://github.com/mrxiaozhuox). [Link](https://github.com/mrxiaozhuox/dioxus-toast) -## 3rd-party - HeroIcon +## 3rd-party – HeroIcon Collection of helpful hero icons, curtesy of [@autarch](https://github.com/autarch). [Link](https://github.com/houseabsolute/dioxus-heroicons) -## 3rd-party - Katex +## 3rd-party – Katex Draw beautiful equations, curtesy of [@oovm](https://github.com/oovm) [Link](https://github.com/oovm/katex-wasm/tree/dev/projects/dioxus-katex) -## 3rd-party - PrimsJS +## 3rd-party – PrimsJS Highlight your code blocks with ease, curtesy of [@oovm](https://github.com/oovm) diff --git a/docs/guide/src/state/index.md b/docs/guide/src/__unused/index.md similarity index 77% rename from docs/guide/src/state/index.md rename to docs/guide/src/__unused/index.md index ac025aff1..1732afdae 100644 --- a/docs/guide/src/state/index.md +++ b/docs/guide/src/__unused/index.md @@ -9,9 +9,9 @@ In this chapter, we'll cover the various ways to manage state, the appropriate t Why do people say state management is so difficult? What does it mean? -Generally, state management is the code you need to write to ensure that your app renders the *correct* content. If the user inputs a name, then you need to display the appropriate response - like alerts, validation, and disable/enable various elements on the page. Things can quickly become tricky if you need loading screens and cancellable tasks. +Generally, state management is the code you need to write to ensure that your app renders the *correct* content. If the user inputs a name, then you need to display the appropriate response – like alerts, validation, and disable/enable various elements on the page. Things can quickly become tricky if you need loading screens and cancellable tasks. -For the simplest of apps, all of your state can enter the app from the root props. This is common in server-side rendering - we can collect all of the required state *before* rendering the content. +For the simplest of apps, all of your state can enter the app from the root props. This is common in server-side rendering – we can collect all of the required state *before* rendering the content. ```rust let all_content = get_all_content().await; @@ -25,7 +25,7 @@ let output = dioxus::ssr::render_lazy(rsx!{ With this incredibly simple setup, it is highly unlikely that you'll have rendering bugs. There simply is barely any state to manage. -However, most of your apps will store state inside of the Dioxus VirtualDom - either through local state or global state. +However, most of your apps will store state inside of the Dioxus VirtualDom – either through local state or global state. ## Your options diff --git a/docs/guide/src/state/localstate.md b/docs/guide/src/__unused/localstate.md similarity index 84% rename from docs/guide/src/state/localstate.md rename to docs/guide/src/__unused/localstate.md index 788399cb5..bf5ae7014 100644 --- a/docs/guide/src/state/localstate.md +++ b/docs/guide/src/__unused/localstate.md @@ -59,14 +59,14 @@ struct Todo { } ``` -This is not only better for encapsulation and abstraction, but it's only more performant! Whenever a Todo is hovered, we won't need to re-render *every* Todo again - only the Todo that's currently being hovered. +This is not only better for encapsulation and abstraction, but it's only more performant! Whenever a Todo is hovered, we won't need to re-render *every* Todo again – only the Todo that's currently being hovered. Wherever possible, you should try to refactor the "view" layer *out* of your data model. ## Immutability -Storing all of your state inside a `use_ref` might be tempting. However, you'll quickly run into an issue where the `Ref` provided by `read()` "does not live long enough." An indeed - you can't return locally-borrowed value into the Dioxus tree. +Storing all of your state inside a `use_ref` might be tempting. However, you'll quickly run into an issue where the `Ref` provided by `read()` "does not live long enough." An indeed – you can't return locally-borrowed value into the Dioxus tree. In these scenarios consider breaking your `use_ref` into individual `use_state`s. @@ -91,7 +91,7 @@ let color = use_state(&cx, || "red"); let names = use_state(&cx, HashMap::new); ``` -You might recognize that our "names" value is a HashMap - which is not terribly cheap to clone every time we update its value. To solve this issue, we *highly* suggest using a library like [`im`](https://crates.io/crates/im) which will take advantage of structural sharing to make clones and mutations much cheaper. +You might recognize that our "names" value is a HashMap – which is not terribly cheap to clone every time we update its value. To solve this issue, we *highly* suggest using a library like [`im`](https://crates.io/crates/im) which will take advantage of structural sharing to make clones and mutations much cheaper. When combined with the `make_mut` method on `use_state`, you can get really succinct updates to collections: diff --git a/docs/guide/src/__unused/memoization.md b/docs/guide/src/__unused/memoization.md new file mode 100644 index 000000000..ef476a457 --- /dev/null +++ b/docs/guide/src/__unused/memoization.md @@ -0,0 +1,28 @@ + +## Memoization + +Dioxus uses Memoization for a more efficient user interface. Memoization is the process in which we check if a component actually needs to be re-rendered when its props change. If a component's properties change but they wouldn't affect the output, then we don't need to re-render the component, saving time! + +For example, let's say we have a component that has two children: + +```rust +fn Demo(cx: Scope) -> Element { + // don't worry about these 2, we'll cover them later + let name = use_state(&cx, || String::from("bob")); + let age = use_state(&cx, || 21); + + cx.render(rsx!{ + Name { name: name } + Age { age: age } + }) +} +``` + +If `name` changes but `age` does not, then there is no reason to re-render our `Age` component since the contents of its props did not meaningfully change. + +Dioxus memoizes owned components. It uses `PartialEq` to determine if a component needs rerendering, or if it has stayed the same. This is why you must derive PartialEq! + +> This means you can always rely on props with `PartialEq` or no props at all to act as barriers in your app. This can be extremely useful when building larger apps where properties frequently change. By moving our state into a global state management solution, we can achieve precise, surgical re-renders, improving the performance of our app. + +Borrowed Props cannot be safely memoized. However, this is not a problem – Dioxus relies on the memoization of their parents to determine if they need to be rerendered. + diff --git a/docs/guide/src/__unused/model_pattern.md b/docs/guide/src/__unused/model_pattern.md new file mode 100644 index 000000000..67f21321a --- /dev/null +++ b/docs/guide/src/__unused/model_pattern.md @@ -0,0 +1,67 @@ + + +## Using UseRef with "models" + +One option for state management that UseRef enables is the development of a "model" for your components. This particular pattern enables you to model your state with regular structs. + +For instance, our calculator example uses a struct to model the state. + +```rust + +struct Calculator { + display_value: String, + operator: Option, + waiting_for_operand: bool, + cur_val: f64, +} +``` + +Our component is really simple – we just call `use_ref` to get an initial calculator state. + +```rust +fn app(cx: Scope) -> Element { + let state = use_ref(&cx, Calculator::new); + + cx.render(rsx!{ + // the rendering code + }) +} +``` + +In our UI, we can then use `read` and a helper method to get data out of the model. + +```rust +// Our accessor method +impl Calculator { + fn formatted_display(&self) -> String { + self.display_value + .parse::() + .unwrap() + .separated_string() + } +} + +// And then in the UI +cx.render(rsx!{ + div { [state.read().formatted_display()] } +}) +``` + +To modify the state, we can setup a helper method and then attach it to a callback. + +```rust +// our helper +impl Calculator { + fn clear_display(&mut self) { + self.display_value = "0".to_string() + } +} + +// our callback +cx.render(rsx!{ + button { + onclick: move |_| state.write().clear_display(), + } +}) +``` + diff --git a/docs/guide/src/advanced-guides/00-index.md b/docs/guide/src/advanced-guides/00-index.md deleted file mode 100644 index aedc39e34..000000000 --- a/docs/guide/src/advanced-guides/00-index.md +++ /dev/null @@ -1,73 +0,0 @@ -# Core Topics - -In this chapter, we'll cover some core topics about how Dioxus works and how to best leverage the features to build a beautiful, reactive app. - -At a very high level, Dioxus is simply a Rust framework for _declaring_ user interfaces and _reacting_ to changes. - -1) We declare what we want our user interface to look like given a state using Rust-based logic and control flow. -2) We declare how we want our state to change when the user triggers an event. - -## Declarative UI - -Dioxus is a *declarative* framework. This means that instead of manually writing calls to "create element" and "set element background to red," we simply *declare* what we want the element to look like and let Dioxus handle the differences. - -Let's pretend that we have a stoplight we need to control - it has a color state with red, yellow, and green as options. - - -Using an imperative approach, we would have to manually declare each element and then handlers for advancing the stoplight. - -```rust -let container = Container::new(); - -let green_light = Light::new().color("green").enabled(true); -let yellow_light = Light::new().color("yellow").enabled(false); -let red_light = Light::new().color("red").enabled(false); -container.push(green_light); -container.push(yellow_light); -container.push(red_light); - -container.set_onclick(move |_| { - if red_light.enabled() { - red_light.set_enabled(false); - green_light.set_enabled(true); - } else if yellow_light.enabled() { - yellow_light.set_enabled(false); - red_light.set_enabled(true); - } else if green_light.enabled() { - green_light.set_enabled(false); - yellow_light.set_enabled(true); - } -}); -``` - -As the UI grows in scale, our logic to keep each element in the proper state would grow exponentially. This can become very unwieldy and lead to out-of-sync UIs that harm user experience. - -Instead, with Dioxus, we *declare* what we want our UI to look like: - -```rust -let mut state = use_state(&cx, || "red"); - -cx.render(rsx!( - Container { - Light { color: "red", enabled: state == "red", } - Light { color: "yellow", enabled: state == "yellow", } - Light { color: "green", enabled: state == "green", } - - onclick: move |_| { - state.set(match *state { - "green" => "yellow", - "yellow" => "red", - "red" => "green", - }) - } - } -)) -``` - -Remember: this concept is not new! Many frameworks are declarative - with React being the most popular. Declarative frameworks tend to be much more enjoyable to work with than imperative frameworks. - -Here's some reading about declaring UI in React: - -- [https://stackoverflow.com/questions/33655534/difference-between-declarative-and-imperative-in-react-js](https://stackoverflow.com/questions/33655534/difference-between-declarative-and-imperative-in-react-js) - -- [https://medium.com/@myung.kim287/declarative-vs-imperative-251ce99c6c44](https://medium.com/@myung.kim287/declarative-vs-imperative-251ce99c6c44) diff --git a/docs/guide/src/advanced-guides/rsx_in_depth.md b/docs/guide/src/advanced-guides/rsx_in_depth.md deleted file mode 100644 index 13f1d47c0..000000000 --- a/docs/guide/src/advanced-guides/rsx_in_depth.md +++ /dev/null @@ -1,229 +0,0 @@ -# RSX in Depth - -The RSX macro makes it very easy to assemble complex UIs with a very natural Rust syntax: - - -```rust -rsx!(div { - button { - "Add todo", - onclick: move |e| todos.write().new_todo() - } - ul { - class: "todo-list" - (todos.iter().map(|(key, todo)| rsx!( - li { - class: "beautiful-todo" - key: "f" - h3 { "{todo.title}" } - p { "{todo.contents}"} - } - ))) - } -}) -``` - -In this section, we'll cover the `rsx!` macro in depth. If you prefer to learn through examples, the `reference` guide has plenty of examples on how to use `rsx!` effectively. - - - -### Element structure - -```rust -div { - hidden: false, - "some text" - child {} - Component {} - {/* literal tokens that resolve to vnodes */} -} - -``` - -Each element takes a comma-separated list of expressions to build the node. Roughly, here's how they work: - -- `name: value` sets a property on this element. -- `"text"` adds a new text element -- `tag {}` adds a new child element -- `CustomTag {}` adds a new child component -- `{expr}` pastes the `expr` tokens literally. They must be `IntoIterator where T: IntoVnode` to work properly - -Commas are entirely optional, but might be useful to delineate between elements and attributes. - -The `render` function provides an **extremely efficient** allocator for VNodes and text, so try not to use the `format!` macro in your components. Rust's default `ToString` methods pass through the global allocator, but all text in components is allocated inside a manually-managed Bump arena. To push you in the right direction, all text-based attributes take `std::fmt::Arguments` directly, so you'll want to reach for `format_args!` when the built-in `f-string` interpolation just doesn't cut it. - - -### Ignoring `cx.render` with `rsx!(cx, ...)` - -Sometimes, writing `cx.render` is a hassle. The `rsx! macro will accept any token followed by a comma as the target to call "render" on: - -```rust -cx.render(rsx!( div {} )) -// becomes -rsx!(cx, div {}) -``` - - - -### Conditional Rendering - -Sometimes, you might not want to render an element given a condition. The rsx! macro will accept any tokens directly contained with curly braces, provided they resolve to a type that implements `IntoIterator`. This lets us write any Rust expression that resolves to a VNode: - - -```rust -rsx!({ - if enabled { - rsx!(cx, div {"enabled"}) - } else { - rsx!(cx, li {"disabled"}) - } -}) -``` -A convenient way of hiding/showing an element is returning an `Option`. When combined with `and_then`, we can succinctly control the display state given some boolean: - -```rust -rsx!({ - a.and_then(rsx!(div {"enabled"})) -}) -``` - -It's important to note that the expression `rsx!()` is typically lazy - this expression must be _rendered_ to produce a VNode. When using match statements, we must render every arm as to avoid the `no two closures are identical` rule that Rust imposes: - -```rust -// this will not compile! -match case { - true => rsx!(div {}), - false => rsx!(div {}) -} - -// the nodes must be rendered first -match case { - true => rsx!(cx, div {}), - false => rsx!(cx, div {}) -} -``` - -### Lists - -Again, because anything that implements `IntoIterator` is valid, we can use lists directly in our `rsx!`: - -```rust -let items = vec!["a", "b", "c"]; - -cx.render(rsx!{ - ul { - {items.iter().map(|f| rsx!(li { "a" }))} - } -}) -``` - -Sometimes, it makes sense to render VNodes into a list: - -```rust -let mut items = vec![]; - -for _ in 0..5 { - items.push(rsx!(cx, li {} )) -} - -rsx!(cx, {items} ) -``` - -#### Lists and Keys - -When rendering the VirtualDom to the screen, Dioxus needs to know which elements have been added and which have been removed. These changes are determined through a process called "diffing" - an old set of elements is compared to a new set of elements. If an element is removed, then it won't show up in the new elements, and Dioxus knows to remove it. - -However, with lists, Dioxus does not exactly know how to determine which elements have been added or removed if the order changes or if an element is added or removed from the middle of the list. - -In these cases, it is vitally important to specify a "key" alongside the element. Keys should be persistent between renders. - -```rust -fn render_list(cx: Scope, items: HashMap) -> DomTree { - rsx!(cx, ul { - {items.iter().map(|key, item| { - li { - key: key, - h2 { "{todo.title}" } - p { "{todo.contents}" } - } - })} - }) -} -``` - -There have been many guides made for keys in React, so we recommend reading up to understand their importance: - -- [React guide on keys](https://reactjs.org/docs/lists-and-keys.html) -- [Importance of keys (Medium)](https://kentcdodds.com/blog/understanding-reacts-key-prop) - -### Complete Reference -```rust -let text = "example"; - -cx.render(rsx!{ - div { - h1 { "Example" }, - - {title} - - // fstring interpolation - "{text}" - - p { - // Attributes - tag: "type", - - // Anything that implements display can be an attribute - abc: 123, - - enabled: true, - - // attributes also supports interpolation - // `class` is not a restricted keyword unlike JS and ClassName - class: "big small wide short {text}", - - class: format_args!("attributes take fmt::Arguments. {}", 99), - - tag: {"these tokens are placed directly"} - - // Children - a { "abcder" }, - - // Children with attributes - h2 { "hello", class: "abc-123" }, - - // Child components - CustomComponent { a: 123, b: 456, key: "1" }, - - // Child components with paths - crate::components::CustomComponent { a: 123, b: 456, key: "1" }, - - // Iterators - { (0..3).map(|i| rsx!( h1 {"{:i}"} )) }, - - // More rsx!, or even html! - { rsx! { div { } } }, - { html! {
} }, - - // Matching - // Requires rendering the nodes first. - // rsx! is lazy, and the underlying closures cannot have the same type - // Rendering produces the VNode type - {match rand::gen_range::(1..3) { - 1 => rsx!(cx, h1 { "big" }) - 2 => rsx!(cx, h2 { "medium" }) - _ => rsx!(cx, h3 { "small" }) - }} - - // Optionals - {true.and_then(|f| rsx!( h1 {"Conditional Rendering"} ))} - - // Child nodes - {cx.props.children} - - // Any expression that is `IntoVNode` - {expr} - } - } -}) -``` diff --git a/docs/guide/src/async/asynctasks.md b/docs/guide/src/async/asynctasks.md deleted file mode 100644 index bcb93633d..000000000 --- a/docs/guide/src/async/asynctasks.md +++ /dev/null @@ -1,90 +0,0 @@ -# Tasks - -All async code in Dioxus must be explicit and handled through Dioxus' task system. - -In this chapter, we'll learn how to spawn new tasks through our `Scope`. - -## Spawning a task - -You can push any `'static` future into the Dioxus future queue by simply calling `cx.spawn` to spawn a task. Pushing a future returns a `TaskId` which can then be used to cancel the - -```rust -fn App(cx: Scope) -> Element { - cx.spawn(async { - let mut count = 0; - loop { - tokio::time::delay(std::instant::Duration::from_millis(500)).await; - count += 1; - println!("Current count is {}", count); - } - }); - - None -} -``` - -The future must be `'static` - so any values captured by the task must not carry any references to `cx`. All the Dioxus hooks have a method called `for_async` which will create a slightly more limited handle to the hook for you to use in your async code. - -```rust -fn App(cx: Scope) -> Element { - let mut count = use_state(&cx, || 0); - - let taskid = cx.spawn({ - let mut count = count.for_async(); - async { - loop { - tokio::time::delay(std::instant::Duration::from_millis(500)).await; - count += 1; - println!("Current count is {}", count); - } - } - }); -} -``` - -The task will run in the background until it is completed. - -> Note: `spawn` will always spawn a *new* future. You probably want to call it from a hook initializer instead of the main body of your component. - -When bringing lots of values into your task, we provide the `for_async!` macro which will can `for_async` on all values passed in. For types that implement `ToOwned`, `for_async!` will simply call `ToOwned` for that value. - -```rust -fn App(cx: Scope) -> Element { - let mut age = use_state(&cx, || 0); - let mut name = use_state(&cx, || "Bob"); - let mut description = use_state(&cx, || "asd".to_string()); - - let taskid = cx.spawn({ - for_async![count, name, description] - async { /* code that uses count/name/description */ } - }); -} -``` - -## Details of Tasks - -Calling `spawn` is *not* a hook and will *always* generate a new task. Make sure to only spawn tasks when you want to. You should *probably* not call `spawn` in the main body of your component, since a new task will be spawned on every render. - -## Spawning Tokio Tasks (for multithreaded use cases) - -Sometimes, you might want to spawn a background task that needs multiple threads or talk to hardware that might block your app code. In these cases, we can can directly spawn a `tokio task` from our future. For Dioxus-Desktop, your task will be spawned onto Tokio's Multithreaded runtime: - -```rust -cx.spawn({ - tokio::spawn(async { - // some multithreaded work - }).await; - - tokio::spawn_blocking(|| { - // some extremely blocking work - }).await; - - tokio::spawn_local(|| { - // some !Send work - }).await; -}) -``` - -> Note: Tokio tasks must be `Send`. Most hooks are `Send` compatible, but if they aren't, then you can use `spawn_local` to spawn onto Dioxus-Desktop's `localset`. - - diff --git a/docs/guide/src/async/index.md b/docs/guide/src/async/index.md index b0abb494f..a95671399 100644 --- a/docs/guide/src/async/index.md +++ b/docs/guide/src/async/index.md @@ -1,104 +1,9 @@ # Working with Async -Not all apps you'll build can be self-contained with synchronous code. You'll often need to interact with file systems, network interfaces, hardware, or timers. - -So far, we've only talked about building apps with synchronous code, so this chapter will focus integrating asynchronous code into your app. +Often, apps need to interact with file systems, network interfaces, hardware, or timers. This chapter provides an overview of using async code in Dioxus. ## The Runtime By default, Dioxus-Desktop ships with the `Tokio` runtime and automatically sets everything up for you. This is currently not configurable, though it would be easy to write an integration for Dioxus desktop that uses a different asynchronous runtime. -## Send/Sync -Writing apps that deal with Send/Sync can be frustrating at times. Under the hood, Dioxus is not currently thread-safe, so any async code you write does *not* need to be `Send/Sync`. That means that you can use non-thread-safe structures like `Cell`, `Rc`, and `RefCell`. - -All async code in your app is polled on a `LocalSet`, so you can also use `tokio::spawn_local`. - -## Spawning a future - -Currently, all futures in Dioxus must be `'static`. To spawn a future, simply call `cx.spawn()`. - -```rust -rsx!{ - button { - onclick: move |_| cx.spawn(async move { - let result = fetch_thing().await; - }) - } -} -``` - -Calling `spawn` will give you a `JoinHandle` which lets you cancel or pause the future. - - -## Setting state from within a future - -If you start to write some async code, you'll quickly be greeted with the infamous error about borrowed items in static closures. - -``` -error[E0759]: `cx` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement - --> examples/tasks.rs:13:27 - | -12 | fn app(cx: Scope) -> Element { - | ----- this data with an anonymous lifetime `'_`... -13 | let count = use_state(&cx, || 0); - | ^^^ ...is used here... -14 | -15 | use_future(&cx, (), move |_| { - | ---------- ...and is required to live as long as `'static` here - | -note: `'static` lifetime requirement introduced by this bound - --> /Users/jonkelley/Development/dioxus/packages/hooks/src/usefuture.rs:25:29 - | -25 | F: Future + 'static, - | ^^^^^^^ - -For more information about this error, try `rustc --explain E0759`. -error: could not compile `dioxus` due to previous error -``` - -Rustc tends to provide great feedback in its errors, but this particular error is actually quite unhelpful. For reference, here's our code: - -```rust -fn app(cx: Scope) -> Element { - let count = use_state(&cx, || 0); - - cx.spawn(async move { - tokio::time::sleep(Duration::from_millis(1000)).await; - count += 1; - }); - - cx.render(rsx! { - button { - onclick: move |_| count.set(0), - "Reset the count" - } - }) -} -``` - -Simple, right? We spawn a future that updates the value after one second has passed. Well, yes, and no. Our `count` value is only valid for the lifetime of this component, but our future could still be running even after the component re-renders. By default, Dioxus places a requirement on all futures to be `'static`, meaning they can't just borrow state from our hooks outright. - -To get around this, we need to get a `'static` handle to our state. All Dioxus hooks implement `Clone`, so you simply need to call clone before spawning your future. Any time you get the particular error above, make sure you call `Clone` or `ToOwned`. - -```rust -cx.spawn({ - let mut count = count.clone(); - async move { - tokio::time::sleep(Duration::from_millis(1000)).await; - count += 1; - } -}); -``` - -To make this a little bit easier, Dioxus exports the `to_owned!` macro which will create a binding as shown above, which can be quite helpful when dealing with many values. - -```rust -cx.spawn({ - to_owned![count, age, name, description, etc]; - async move { - tokio::time::sleep(Duration::from_millis(1000)).await; - count += 1; - } -}); -``` - +Dioxus is not currently thread-safe, so any async code you write does *not* need to be `Send/Sync`. That means that you can use non-thread-safe structures like `Cell`, `Rc`, and `RefCell`. diff --git a/docs/guide/src/async/loading_state.md b/docs/guide/src/async/loading_state.md deleted file mode 100644 index 66ea79ba9..000000000 --- a/docs/guide/src/async/loading_state.md +++ /dev/null @@ -1,8 +0,0 @@ -# Updating State - -After your future has been spawned, you might want to update the state of our UI. Possible implementations might include: - -- A loading state -- A transition state -- Showing failures -- Listening to sockets and updating the app diff --git a/docs/guide/src/async/spawn.md b/docs/guide/src/async/spawn.md new file mode 100644 index 000000000..aa2d8046c --- /dev/null +++ b/docs/guide/src/async/spawn.md @@ -0,0 +1,29 @@ +# Spawning Futures + +The `use_future` and `use_coroutine` hooks are useful if you want to unconditionally spawn the future. Sometimes, though, you'll want to only spawn a future in response to an event, such as a mouse click. For example, suppose you need to send a request when the user clicks a "log in" button. For this, you can use `cx.spawn`: + +```rust +{{#include ../../examples/spawn.rs:spawn}} +``` + +> Note: `spawn` will always spawn a *new* future. You most likely don't want to call it on every render. + +The future must be `'static` – so any values captured by the task cannot carry any references to `cx`, such as a `UseState`. + +However, since you'll typically need a way to update the value of a hook, you can use `to_owned` to create a clone of the hook handle. You can then use that clone in the async closure. + +To make this a bit less verbose, Dioxus exports the `to_owned!` macro which will create a binding as shown above, which can be quite helpful when dealing with many values. + +```rust +{{#include ../../examples/spawn.rs:to_owned_macro}} +``` + +Calling `spawn` will give you a `JoinHandle` which lets you cancel or pause the future. + +## Spawning Tokio Tasks + +Sometimes, you might want to spawn a background task that needs multiple threads or talk to hardware that might block your app code. In these cases, we can directly spawn a Tokio task from our future. For Dioxus-Desktop, your task will be spawned onto Tokio's Multithreaded runtime: + +```rust +{{#include ../../examples/spawn.rs:tokio}} +``` diff --git a/docs/guide/src/async/coroutines.md b/docs/guide/src/async/use_coroutine.md similarity index 94% rename from docs/guide/src/async/coroutines.md rename to docs/guide/src/async/use_coroutine.md index f59e9102f..b3228b3e8 100644 --- a/docs/guide/src/async/coroutines.md +++ b/docs/guide/src/async/use_coroutine.md @@ -48,7 +48,7 @@ if sync.is_running() { } ``` -This pattern is where coroutines are extremely useful - instead of writing all the complicated logic for pausing our async tasks like we would with JavaScript promises, the Rust model allows us to just not poll our future. +This pattern is where coroutines are extremely useful – instead of writing all the complicated logic for pausing our async tasks like we would with JavaScript promises, the Rust model allows us to just not poll our future. ## Sending Values @@ -103,7 +103,7 @@ async fn editor_service(rx: UnboundedReceiver) { } ``` -We can combine coroutines with Fermi to emulate Redux Toolkit's Thunk system with much less headache. This lets us store all of our app's state *within* a task and then simply update the "view" values stored in Atoms. It cannot be understated how powerful this technique is: we get all the perks of native Rust tasks with the optimizations and ergonomics of global state. This means your *actual* state does not need to be tied up in a system like Fermi or Redux - the only Atoms that need to exist are those that are used to drive the display/UI. +We can combine coroutines with Fermi to emulate Redux Toolkit's Thunk system with much less headache. This lets us store all of our app's state *within* a task and then simply update the "view" values stored in Atoms. It cannot be understated how powerful this technique is: we get all the perks of native Rust tasks with the optimizations and ergonomics of global state. This means your *actual* state does not need to be tied up in a system like Fermi or Redux – the only Atoms that need to exist are those that are used to drive the display/UI. ```rust static USERNAME: Atom = |_| "default".to_string(); diff --git a/docs/guide/src/async/use_future.md b/docs/guide/src/async/use_future.md index 0c45ddcb3..7c3a611fe 100644 --- a/docs/guide/src/async/use_future.md +++ b/docs/guide/src/async/use_future.md @@ -1,85 +1,33 @@ # UseFuture -When dealing with asynchronous code, you might need to wait for some action to complete before rendering your component. If you had to build this abstraction yourself, you'd probably end up with some `use_state` spaghetti code. +[`use_future`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_future.html) lets you run an async closure, and provides you with its result. -One of the core hooks that Dioxus provides is `use_future` - a simple hook that lets you tap into a running task. - -## Use case - -The simplest use case of `use_future` is to prevent rendering until some asynchronous code has been completed. Dioxus doesn't currently have a library as sophisticated as React Query for prefetching tasks, but we can get some of the way there with `use_future`. In one of the Dioxus examples, we use `use_future` to download some search data before rendering the rest of the app: +For example, we can make an API request inside `use_future`: ```rust -fn app(cx: Scope) -> Element { - // set "breeds" to the current value of the future - let breeds = use_future(&cx, (), |_| async move { - reqwest::get("https://dog.ceo/api/breeds/list/all") - .await - .unwrap() - .json::() - .await - }); - - let status = match breeds.value() { - Some(Ok(val)) => "ready!", - Some(Err(err)) => "errored!", - None => "loading!", - } -} +{{#include ../../examples/use_future.rs:use_future}} ``` -On first run, the code inside `use_future` will be submitted to the Dioxus scheduler once the component has rendered. Since there's no data ready when the component loads the first time, its "value" will be `None`. +The code inside `use_future` will be submitted to the Dioxus scheduler once the component has rendered. -However, once the future is finished, the component will be re-rendered and a new screen will be displayed - Ok or Err, depending on the outcome of our fetch. +We can use `.value()` to get the result of the future. On the first run, since there's no data ready when the component loads, its value will be `None`. However, once the future is finished, the component will be re-rendered and the value will now be `Some(...)`, containing the return value of the closure. +We can then render that result: + +```rust +{{#include ../../examples/use_future.rs:render}} +``` ## Restarting the Future -The example we showed above will only ever run once. What happens if some value changed on the server and we need to update our future's value? +The `UseFuture` handle provides a `restart` method. It can be used to execute the future again, producing a new value. -Well, the UseFuture handle provides a handy "restart" method. We can wire this up to a button or some other comparison code to get a regenerating future. +## Dependencies -```rust -fn app(cx: Scope) -> Element { - // set "breeds" to the current value of the future - let dog = use_future(&cx, (), |_| async move { - reqwest::get("https://dog.ceo/api/breeds/image/random") - .await - .unwrap() - .json::() - .await - }); - - cx.render(match breeds.value() { - Some(Ok(val)) => rsx!(div { - img { src: "{val.message}"} - button { - onclick: move |_| dog.restart(), - "Click to fetch a new dog" - } - }), - Some(Err(err)) => rsx!("Failed to load dog"), - None => rsx!("Loading dog image!"), - }) -} -``` - -## With Dependencies - -We showed that UseFuture can be regenerated manually, but how can we automatically get it to update whenever some input value changes? This is where the "dependencies" tuple comes into play. We just need to add a value into our tuple argument and it'll be automatically cloned into our future when it starts. +Often, you will need to run the future again every time some value (e.g. a prop) changes. Rather than `.restart`ing it manually, you can provide a tuple of "dependencies" to the hook. It will automatically re-run the future when any of those dependencies change. Example: ```rust -#[inline_props] -fn RandomDog(cx: Scope, breed: String) -> Element { - let dog = use_future(&cx, (breed,), |(breed)| async move { - reqwest::get(format!("https://dog.ceo/api/breed/{breed}/images/random")) - .await - .unwrap() - .json::() - .await - }); - - // some code as before -} +{{#include ../../examples/use_future.rs:dependency}} ``` diff --git a/docs/guide/src/best_practices/antipatterns.md b/docs/guide/src/best_practices/antipatterns.md new file mode 100644 index 000000000..715c5c00c --- /dev/null +++ b/docs/guide/src/best_practices/antipatterns.md @@ -0,0 +1,33 @@ +# Antipatterns + +This example shows what not to do and provides a reason why a given pattern is considered an "AntiPattern". Most anti-patterns are considered wrong due performance reasons, or for harming code re-usability. + +## Unnecessarily Nested Fragments + +Fragments don't mount a physical element to the DOM immediately, so Dioxus must recurse into its children to find a physical DOM node. This process is called "normalization". This means that deeply nested fragments make Dioxus perform unnecessary work. Prefer one or two levels of fragments / nested components until presenting a true DOM element. + +Only Component and Fragment nodes are susceptible to this issue. Dioxus mitigates this with components by providing an API for registering shared state without the Context Provider pattern. + +```rust +{{#include ../../examples/anti_patterns.rs:nested_fragments}} +``` + +## Incorrect Iterator Keys + +As described in the conditional rendering chapter, list items must have unique keys that are associated with the same items across renders. This helps Dioxus associate state with the contained components, and ensures good diffing performance. Do not omit keys, unless you know that the list is static and will never change. + +```rust +{{#include ../../examples/anti_patterns.rs:iter_keys}} +``` + +## Avoid Interior Mutability in Props + +While it is technically acceptable to have a `Mutex` or a `RwLock` in the props, they will be difficult to use. + +Suppose you have a struct `User` containing the field `username: String`. If you pass a `Mutex` prop to a `UserComponent` component, that component may wish to pass the username as a `&str` prop to a child component. However, it cannot pass that borrowed field down, since it only would live as long as the `Mutex`'s lock, which belongs to the `UserComponent` function. Therefore, the component will be forced to clone the `username` field. + +## Avoid Updating State During Render + +Every time you update the state, Dioxus needs to re-render the component – this is inefficient! Consider refactoring your code to avoid this. + +Also, if you unconditionally update the state during render, it will be re-rendered in an infinite loop. \ No newline at end of file diff --git a/docs/guide/src/state/errorhandling.md b/docs/guide/src/best_practices/error_handling.md similarity index 99% rename from docs/guide/src/state/errorhandling.md rename to docs/guide/src/best_practices/error_handling.md index 3dab3644a..c9a465532 100644 --- a/docs/guide/src/state/errorhandling.md +++ b/docs/guide/src/best_practices/error_handling.md @@ -6,7 +6,7 @@ However, we haven't talked about error handling at all in this guide! In this ch -## The simplest - returning None +## The simplest – returning None Astute observers might have noticed that `Element` is actually a type alias for `Option`. You don't need to know what a `VNode` is, but it's important to recognize that we could actually return nothing at all: diff --git a/docs/guide/src/best_practices/index.md b/docs/guide/src/best_practices/index.md new file mode 100644 index 000000000..2270508f1 --- /dev/null +++ b/docs/guide/src/best_practices/index.md @@ -0,0 +1,29 @@ +# Best Practices + +## Reusable Components + +As much as possible, break your code down into small, reusable components and hooks, instead of implementing large chunks of the UI in a single component. This will help you keep the code maintainable – it is much easier to e.g. add, remove or re-order parts of the UI if it is organized in components. + +Organize your components in modules to keep the codebase easy to navigate! + +## Minimize State Dependencies + +While it is possible to share state between components, this should only be done when necessary. Any component that is associated with a particular state object needs to be re-rendered when that state changes. For this reason: + +- Keep state local to a component if possible +- When sharing state through props, only pass down the specific data necessary + +## Reusable Libraries + +When publishing a library designed to work with Dioxus, we highly advise using only the core feature on the `dioxus` crate. This makes your crate compile faster, makes it more stable, and avoids bringing in incompatible libraries that might make it not compile on unsupported platforms. + + +❌ Don't include unnecessary dependencies in libraries: +```toml +dioxus = { version = "...", features = ["web", "desktop", "full"]} +``` + +✅ Only add the features you need: +```toml +dioxus = { version = "...", features = "core"} +``` diff --git a/docs/guide/src/components/component_children.md b/docs/guide/src/components/component_children.md deleted file mode 100644 index 9fb0f8552..000000000 --- a/docs/guide/src/components/component_children.md +++ /dev/null @@ -1,218 +0,0 @@ -# Passing children and attributes - -Oftentimes, you'll want to wrap some important functionality *around* your state, not directly nested *inside* another component. In these cases, you'll want to pass elements and attributes into a component and let the component place them appropriately. - -In this chapter, you'll learn about: -- Passing elements into components -- Passing attributes into components - - -## The use case - -Let's say you're building a user interface and want to make some part of it a clickable link to another website. You would normally start with the HTML `
` tag, like so: - -```rust -rsx!( - a { - href: "https://google.com" - "Link to google" - } -) -``` - -But, what if we wanted to style our `` tag? Or wrap it with some helper icon? We could abstract our RSX into its own component: - - -```rust -#[derive(Props)] -struct ClickableProps<'a> { - href: &'a str, - title: &'a str -} - -fn Clickable<'a>(cx: Scope<'a, ClickableProps<'a>>) -> Element { - cx.render(rsx!( - a { - href: "{cx.props.href}" - "{cx.props.title}" - } - )) -} -``` - -And then use it in our code like so: - -```rust -rsx!( - Clickable { - href: "https://google.com" - title: "Link to Google" - } -) -``` - -Let's say we don't just want the text to be clickable, but we want another element, like an image, to be clickable. How do we implement that? - -## Passing children - -If we want to pass an image into our component, we can just adjust our props and component to allow any `Element`. - -```rust -#[derive(Props)] -struct ClickableProps<'a> { - href: &'a str, - body: Element<'a> -} - -fn Clickable<'a>(cx: Scope<'a, ClickableProps<'a>>) -> Element { - cx.render(rsx!( - a { - href: "{cx.props.href}", - &cx.props.body - } - )) -} -``` - -Then, at the call site, we can render some nodes and pass them in: - -```rust -rsx!( - Clickable { - href: "https://google.com" - body: cx.render(rsx!( - img { src: "https://www.google.com/logos/doodles/..." } - )) - } -) -``` - -## Auto Conversion of the `Children` field - -This pattern can become tedious in some instances, so Dioxus actually performs an implicit conversion of any `rsx` calls inside components into `Elements` at the `children` field. This means you must explicitly declare if a component can take children. - -```rust -#[derive(Props)] -struct ClickableProps<'a> { - href: &'a str, - children: Element<'a> -} - -fn Clickable<'a>(cx: Scope<'a, ClickableProps<'a>>) -> Element { - cx.render(rsx!( - a { - href: "{cx.props.href}", - &cx.props.children - } - )) -} -``` - -Now, whenever we use `Clickable` in another component, we don't need to call `render` on child nodes - it will happen automatically! -```rust -rsx!( - Clickable { - href: "https://google.com" - img { src: "https://www.google.com/logos/doodles/...." } - } -) -``` - -> Note: Passing children into components will break any memoization due to the associated lifetime. - -While technically allowed, it's an antipattern to pass children more than once in a component and will probably cause your app to crash. - -However, because the `Element` is transparently a `VNode`, we can actually match on it to extract the nodes themselves, in case we are expecting a specific format: - -```rust -fn clickable<'a>(cx: Scope<'a, ClickableProps<'a>>) -> Element { - match cx.props.children { - Some(VNode::Text(text)) => { - // ... - } - _ => { - // ... - } - } -} -``` - -Passing nodes through props means that they are immutable. If you find yourself needing to mutate nodes passed through props, consider creating a new node in its place that takes on its attributes, children, and listeners. - - - -## Passing handlers - -Dioxus also provides some implicit conversions from listener attributes into an `EventHandler` for any field on components that starts with `on`. IE `onclick`, `onhover`, etc. For properties, we want to define our `on` fields as an event handler: - - -```rust -#[derive(Props)] -struct ClickableProps<'a> { - onclick: EventHandler<'a, MouseEvent> -} - -fn clickable<'a>(cx: Scope<'a, ClickableProps<'a>>) -> Element { - cx.render(rsx!( - a { - onclick: move |evt| cx.props.onclick.call(evt) - } - )) -} -``` - -Then, we can attach a listener at the call site: - -```rust -rsx!( - Clickable { - onclick: move |_| log::info!("Clicked"), - } -) -``` - -Currently, Dioxus does not support an arbitrary amount of listeners - they must be strongly typed in `Properties`. If you need this use case, you can pass in an element with these listeners, or dip down into the `NodeFactory` API. - - -## Wrapping up - -In this chapter, we learned: -- How to pass arbitrary nodes through the tree -- How the `children` field works on component properties -- How the `attributes` field works on component properties -- How to convert `listeners` into `EventHandlers` for components -- How to extend any node with custom attributes and children diff --git a/docs/guide/src/components/component_example_title.png b/docs/guide/src/components/component_example_title.png deleted file mode 100644 index 60a5a329e36bac5b3aa2c63e8c27e3d9fed86b68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8426 zcmc(FWl$VIllB6^AvlY(S)AZba9Ci`V8Pu9?k)iWi%W3#kl>QwZo!t|ki`kXHMkz{ zRee?8y?6KC{kyK3nVPDe>7J*iXL_ERC^c1iTr3JK004li0EK7(07%aTu#JKCTq~EZ zlPRv;p&dj~>Qq4q>g#5E; zu_^d2!HFa>01^N{07d#N3|4Nc2OvYDM`=a{(KR_IB0#ACt&`JJJ8I*OTZr@93AH%w z*Gd}3e=}g^E|{-OxwBInV`H;F!*j^QX6?T?{NQtYeckx- zC5}T<{0R`gOZ>w22+pWj`=i+|IX55YJ%eE8 zwnri%0f{WbH>@}4WRv});gXJUmdsOY^0sMD-MsQ4>V^i~lO>BpLiM`Y;Z>NpRHn

J;Nn&ICk=JERm+-JGAaYXOxcTH^pRBQ5bj3h~ zG_GViW7!_i*~M0TRJ(Ouq{OA6{REtNyNFK2hY@v

7N*+YycQ)0%PpveYr-6z*}L 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 diff --git a/docs/guide/src/components/component_example_votes.png b/docs/guide/src/components/component_example_votes.png deleted file mode 100644 index b46739b2448965d953193dbdea05893caeff30bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4244 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 f|2HLT^#mAoxhbQ~VP)# Element {} - -#[derive(PartialEq, Props)] -struct PostProps{} -fn Post(Scope) -> Element {} - -#[derive(PartialEq, Props)] -struct VoteButtonsProps {} -fn VoteButtons(Scope) -> Element {} - -#[derive(PartialEq, Props)] -struct TitleCardProps {} -fn TitleCard(Scope) -> Element {} - -#[derive(PartialEq, Props)] -struct MetaCardProps {} -fn MetaCard(Scope) -> Element {} - -#[derive(PartialEq, Props)] -struct ActionCardProps {} -fn ActionCard(Scope) -> Element {} -``` - -That's a lot of components for one file! We've successfully refactored our app into components, but we should probably start breaking it up into a file for each component. - -## Breaking into different files - -Fortunately, Rust has a built-in module system that's much cleaner than what you might be used to in JavaScript. Because `VoteButtons`, `TitleCard`, `MetaCard`, and `ActionCard` all belong to the `Post` component, let's put them all in a folder together called "post". We'll make a file for each component and move the props and render function. - -```rust -// src/post/action.rs - -use dioxus::prelude::*; - -#[derive(PartialEq, Props)] -struct ActionCardProps {} -fn ActionCard(Scope) -> Element {} -``` - -We should also create a `mod.rs` file in the `post` folder so we can use it from our `main.rs`. Our `Post` component and its props will go into this file. - -```rust -// src/post/mod.rs - -use dioxus::prelude::*; - -#[derive(PartialEq, Props)] -struct PostProps {} -fn Post(Scope) -> Element {} -``` - -```shell -├── Cargo.toml -└── src - ├── main.rs - └── post - ├── vote.rs - ├── title.rs - ├── meta.rs - ├── action.rs - └── mod.rs -``` - -In our `main.rs`, we'll want to declare the `post` module so we can access our `Post` component. - -```rust -// main.rs -use dioxus::prelude::*; - -fn main() { - dioxus::desktop::launch(App); -} - -mod post; - -fn App(Scope) -> Element { - cx.render(rsx!{ - post::Post { - id: Uuid::new_v4(), - score: 10, - comment_count: 10, - post_time: std::Instant::now(), - url: "example".to_string(), - title: "Title".to_string(), - original_poster: "me".to_string() - } - }) -} -``` - -If you tried to build this app right now, you'll get an error message saying that `Post is private, try changing it to public`. This is because we haven't properly exported our component! To fix this, we need to make sure both the Props and Component are declared as "public": - -```rust -// src/post/mod.rs - -use dioxus::prelude::*; - -#[derive(PartialEq, Props)] -pub struct PostProps {} -pub fn Post(Scope) -> Element {} -``` - -While we're here, we also need to make sure each of our subcomponents are included as modules and exported. - -Our "post/mod.rs" file will eventually look like this: - -```rust -use dioxus::prelude::*; - -mod vote; -mod title; -mod meta; -mod action; - -#[derive(Props, PartialEq)] -pub struct PostProps { - id: uuid::Uuid, - score: i32, - comment_count: u32, - post_time: std::time::Instant, - url: String, - title: String, - original_poster: String -} - -pub fn Post(Scope) -> Element { - cx.render(rsx!{ - div { class: "post-container" - vote::VoteButtons { - score: props.score, - } - title::TitleCard { - title: props.title, - url: props.url, - } - meta::MetaCard { - original_poster: props.original_poster, - post_time: props.post_time, - } - action::ActionCard { - post_id: props.id - } - } - }) -} -``` - -Ultimately, including and exporting components is governed by Rust's module system. [The Rust book is a great resource to learn about these concepts in greater detail.](https://doc.rust-lang.org/book/ch07-00-managing-growing-projects-with-packages-crates-and-modules.html) - -## Final structure: - -```shell -├── Cargo.toml -└── src - ├── main.rs - └── post - ├── vote.rs - ├── title.rs - ├── meta.rs - ├── action.rs - └── mod.rs -``` - -```rust -// main.rs: -use dioxus::prelude::*; - -fn main() { - dioxus::desktop::launch(App); -} - -mod post; - -fn App(Scope) -> Element { - cx.render(rsx!{ - post::Post { - id: Uuid::new_v4(), - score: 10, - comment_count: 10, - post_time: std::Instant::now(), - url: "example".to_string(), - title: "Title".to_string(), - original_poster: "me".to_string() - } - }) -} -``` - - -```rust -// src/post/mod.rs -use dioxus::prelude::*; - -mod vote; -mod title; -mod meta; -mod action; - -#[derive(Props, PartialEq)] -pub struct PostProps { - id: uuid::Uuid, - score: i32, - comment_count: u32, - post_time: std::time::Instant, - url: String, - title: String, - original_poster: String -} - -pub fn Post(Scope) -> Element { - cx.render(rsx!{ - div { class: "post-container" - vote::VoteButtons { - score: props.score, - } - title::TitleCard { - title: props.title, - url: props.url, - } - meta::MetaCard { - original_poster: props.original_poster, - post_time: props.post_time, - } - action::ActionCard { - post_id: props.id - } - } - }) -} -``` - -```rust -// src/post/vote.rs -use dioxus::prelude::*; - -#[derive(PartialEq, Props)] -pub struct VoteButtonsProps {} -pub fn VoteButtons(Scope) -> Element {} -``` - -```rust -// src/post/title.rs -use dioxus::prelude::*; - -#[derive(PartialEq, Props)] -pub struct TitleCardProps {} -pub fn TitleCard(Scope) -> Element {} -``` - -```rust -// src/post/meta.rs -use dioxus::prelude::*; - -#[derive(PartialEq, Props)] -pub struct MetaCardProps {} -pub fn MetaCard(Scope) -> Element {} -``` - -```rust -// src/post/action.rs -use dioxus::prelude::*; - -#[derive(PartialEq, Props)] -pub struct ActionCardProps {} -pub fn ActionCard(Scope) -> Element {} -``` diff --git a/docs/guide/src/components/index.md b/docs/guide/src/components/index.md deleted file mode 100644 index ff4811a33..000000000 --- a/docs/guide/src/components/index.md +++ /dev/null @@ -1,42 +0,0 @@ -# Introduction to Components - -In the previous chapter, we learned about Elements and how they can be composed to create a basic user interface. Now, we'll learn how to group Elements together to form Components. We'll cover: - -- What makes a Component -- How to model a component and its properties in Dioxus -- How to "think declaratively" - -## What is a component? - -In short, a component is a special function that takes input properties and outputs an Element. Much like a function encapsulates some specific computation task, a Component encapsulates some specific rendering task – typically, rendering an isolated part of the user interface. - -### Real-world example - -Let's use a Reddit post as an example: - -![Reddit Post](../images/reddit_post.png) - -If we look at the layout of the component, we notice quite a few buttons and pieces of functionality: - -- Upvote/Downvote -- View comments -- Share -- Save -- Hide -- Give award -- Report -- Crosspost -- Filter by site -- View article -- Visit user - -If we included all this functionality in one `rsx!` call it would be huge! Instead, let's break the post down into Components: - -![Post as Component](../images/reddit_post_components.png) - -- **VoteButton**: Upvote/Downvote -- **TitleCard**: Title, Filter-By-Url -- **MetaCard**: Original Poster, Time Submitted -- **ActionCard**: View comments, Share, Save, Hide, Give award, Report, Crosspost - -In this chapter, we'll learn how to define these components. diff --git a/docs/guide/src/components/propsmacro.md b/docs/guide/src/components/propsmacro.md deleted file mode 100644 index ec9ff255e..000000000 --- a/docs/guide/src/components/propsmacro.md +++ /dev/null @@ -1,232 +0,0 @@ -# Component Properties - -Dioxus components are functions that accept Props as input and output an Element. In fact, the `App` function you saw in the previous chapter was a component with no Props! Most components, however, will need to take some Props to render something useful – so, in this section, we'll learn about props: - -- Deriving the Props trait -- Memoization through PartialEq -- Optional fields on props -- The inline_props macro - -## Props - -The input of your Component must be passed in a single struct, which must implement the `Props` trait. We can derive this trait automatically with `#[derive(Props)]`. - -> Dioxus `Props` is very similar to [@idanarye](https://github.com/idanarye)'s [TypedBuilder crate](https://github.com/idanarye/rust-typed-builder) and supports many of the same parameters. - -There are 2 flavors of Props: owned and borrowed. - -- All Owned Props must implement `PartialEq` -- Borrowed props [borrow](https://doc.rust-lang.org/beta/rust-by-example/scope/borrow.html) values from the parent Component - -### Owned Props - -Owned Props are very simple – they don't borrow anything. Example: -```rust -// Remember: owned props must implement PartialEq! -#[derive(PartialEq, Props)] -struct VoteButtonProps { - score: i32 -} - -fn VoteButton(cx: Scope) -> Element { - cx.render(rsx!{ - div { - div { "+" } - div { "{cx.props.score}"} - div { "-" } - } - }) -} -``` - -Now, we can use the VoteButton Component like we would use a regular HTML element: - -```rust -fn main() { - dioxus::desktop::launch(App); -} - -fn App(cx: Scope) -> Element { - cx.render(rsx! ( - VoteButton { score: 42 } - )) -} -``` - -And we can see that the Component indeed gets rendered: - -![Screenshot of running app. Text: "+ \ 42 \ -"](component_example_votes.png) - -> The simplest Owned Props you can have is `()` - or no value at all. This is what the `App` Component takes as props. `Scope` accepts a generic for the Props which defaults to `()`. -> -> ```rust ->// this scope ->Scope<()> -> ->// is the same as this scope ->Scope ->``` - -### Borrowed Props - -Owning props works well if your props are easy to copy around - like a single number. But what if we need to pass a larger data type, like a String from an `App` Component to a `TitleCard` subcomponent? A naive solution might be to [`.clone()`](https://doc.rust-lang.org/std/clone/trait.Clone.html) the String, creating a copy of it for the subcomponent – but this would be inefficient, especially for larger Strings. - -Rust allows for something more efficient – borrowing the String as a `&str`. Instead of creating a copy, this will give us a reference to the original String – this is what Borrowed Props are for! - -However, if we create a reference a String, Rust will require us to show that the String will not go away while we're using the reference. Otherwise, if we referenced something that doesn't exist, Bad Things could happen. To prevent this, Rust asks us to define a lifetime for the reference: - -```rust -#[derive(Props)] -struct TitleCardProps<'a> { - title: &'a str, -} - -fn TitleCard<'a>(cx: Scope<'a, TitleCardProps<'a>>) -> Element { - cx.render(rsx!{ - h1 { "{cx.props.title}" } - }) -} -``` - -This lifetime `'a` tells the compiler that as long as `title` exists, the String it was created from must also exist. Dioxus will happily accept such a component – we can now render it alongside our VoteButton! - -```rust -fn App(cx: Scope) -> Element { - // For the sake of an example, we create the &str here. - // But you might as well borrow it from an owned String type. - let hello = "Hello Dioxus!"; - - cx.render(rsx! ( - VoteButton { score: 42 }, - TitleCard { title: hello } - )) -} -``` -![New screenshot of running app, now including a "Hello Dioxus!" heading.](component_example_title.png) - -## Memoization - -Dioxus uses Memoization for a more efficient user interface. Memoization is the process in which we check if a component actually needs to be re-rendered when its props change. If a component's properties change but they wouldn't affect the output, then we don't need to re-render the component, saving time! - -For example, let's say we have a component that has two children: - -```rust -fn Demo(cx: Scope) -> Element { - // don't worry about these 2, we'll cover them later - let name = use_state(&cx, || String::from("bob")); - let age = use_state(&cx, || 21); - - cx.render(rsx!{ - Name { name: name } - Age { age: age } - }) -} -``` - -If `name` changes but `age` does not, then there is no reason to re-render our `Age` component since the contents of its props did not meaningfully change. - -Dioxus memoizes owned components. It uses `PartialEq` to determine if a component needs rerendering, or if it has stayed the same. This is why you must derive PartialEq! - -> This means you can always rely on props with `PartialEq` or no props at all to act as barriers in your app. This can be extremely useful when building larger apps where properties frequently change. By moving our state into a global state management solution, we can achieve precise, surgical re-renders, improving the performance of our app. - -Borrowed Props cannot be safely memoized. However, this is not a problem – Dioxus relies on the memoization of their parents to determine if they need to be rerendered. - -## Optional Props - -You can easily create optional fields by using the `Option<…>` type for a field: - -```rust -#[derive(Props, PartialEq)] -struct MyProps { - name: String, - - description: Option -} - -fn Demo(cx: MyProps) -> Element { - let text = match cx.props.description { - Some(d) => d, // if a value is provided - None => "No description" // if the prop is omitted - }; - - cx.render(rsx! { - "{name}": "{text}" - }) -} -``` -In this example `name` is a required prop and `description` is optional. -This means we can completely omit the description field when calling the component: - -```rust -rsx!{ - Demo { - name: "Thing".to_string(), - // description is omitted - } -} -``` -Additionally if we provide a value we don't have to wrap it with `Some(…)`. This is done automatically for us: - -```rust -rsx!{ - Demo { - name: "Thing".to_string(), - description: "This is explains it".to_string(), - } -} -``` - -If you want to make a prop required even though it is of type `Option` you can provide the `!optional` modifier: - -```rust -#[derive(Props, PartialEq)] -struct MyProps { - name: String, - - #[props(!optional)] - description: Option -} -``` - -This can be especially useful if you have a type alias named `Option` in the current scope. - -For more information on how tags work, check out the [TypedBuilder](https://github.com/idanarye/rust-typed-builder) crate. However, all attributes for props in Dioxus are flattened (no need for `setter` syntax) and the `optional` field is new. The `optional` modifier is a combination of two separate modifiers: `default` and `strip_option` and it is automatically detected on `Option<…>` types. - -The full list of Dioxus' modifiers includes: - -- `default` - automatically add the field using its `Default` implementation -- `optional` - alias for `default` and `strip_option` -- `into` - automatically call `into` on the value at the callsite - - -## The `inline_props` macro - -So far, every Component function we've seen had a corresponding ComponentProps struct to pass in props. This was quite verbose... Wouldn't it be nice to have props as simple function arguments? Then we wouldn't need to define a Props struct, and instead of typing `cx.props.whatever`, we could just use `whatever` directly! - -`inline_props` allows you to do just that. Instead of typing the "full" version: - -```rust -#[derive(Props, PartialEq)] -struct TitleCardProps { - title: String, -} - -fn TitleCard(cx: Scope) -> Element { - cx.render(rsx!{ - h1 { "{cx.props.title}" } - }) -} -``` - -...you can define a function that accepts props as arguments. Then, just annotate it with `#[inline_props]`, and the macro will turn it into a regular Component for you: - -```rust -#[inline_props] -fn TitleCard(cx: Scope, title: String) -> Element { - cx.render(rsx!{ - h1 { "{title}" } - }) -} -``` - -> While the new Component is shorter and easier to read, this macro should not be used by library authors since you have less control over Prop documentation. diff --git a/docs/guide/src/contributing.md b/docs/guide/src/contributing.md new file mode 100644 index 000000000..0bfde1a15 --- /dev/null +++ b/docs/guide/src/contributing.md @@ -0,0 +1,20 @@ +# Contributing + +Development happens in the [Dioxus GitHub repository](https://github.com/DioxusLabs/dioxus). If you've found a bug or have an idea for a feature, please submit an issue (check if someone hasn't [done it already](https://github.com/DioxusLabs/dioxus/issues) though). + +[GitHub discussions](https://github.com/DioxusLabs/dioxus/discussions) can be used as a place to ask for help or talk about features. You can also join [our Discord channel](https://discord.gg/XgGxMSkvUM) where some development discussion happens. + +## Improving Docs + +If you'd like to improve the docs, PRs are welcome! Both Rust docs ([source](https://github.com/DioxusLabs/dioxus/tree/master/packages)) and this guide ([source](https://github.com/DioxusLabs/dioxus/tree/master/docs/guide)) can be found in the GitHub repo. + +## Working on the Ecosystem + +Part of what makes React great is the rich ecosystem. We'd like the same for Dioxus! So if you have a library in mind that you'd like to write, and that you think many people would benefit from, it will be appreciated. You can [browse npm.js](https://www.npmjs.com/search?q=keywords:react-component) for inspiration. + +## Bugs & Features + +If you've fixed [an issue that's open](https://github.com/DioxusLabs/dioxus/issues), feel free to submit a PR! You can also take a look at [the roadmap](./roadmap.md) and work on something in there. Consider [reaching out](https://discord.gg/XgGxMSkvUM) to the team first to make sure everyone's on the same page, and you don't do useless work! + +All pull requests (including those made by a team member) must be approved by at least one other team member. +Larger, more nuanced decisions about design, architecture, breaking changes, trade-offs, etc. are made by team consensus. diff --git a/docs/reference/src/guide/custom_renderer.md b/docs/guide/src/custom_renderer/index.md similarity index 97% rename from docs/reference/src/guide/custom_renderer.md rename to docs/guide/src/custom_renderer/index.md index 61f35c9ba..b5ccc51b1 100644 --- a/docs/reference/src/guide/custom_renderer.md +++ b/docs/guide/src/custom_renderer/index.md @@ -47,7 +47,7 @@ The Dioxus diffing mechanism operates as a [stack machine](https://en.wikipedia. ### An example -For the sake of understanding, lets consider this example - a very simple UI declaration: +For the sake of understanding, lets consider this example – a very simple UI declaration: ```rust rsx!( h1 {"hello world"} ) @@ -219,7 +219,7 @@ fn virtual_event_from_websys_event(event: &web_sys::Event) -> VirtualEvent { ## Custom raw elements -If you need to go as far as relying on custom elements for your renderer - you totally can. This still enables you to use Dioxus' reactive nature, component system, shared state, and other features, but will ultimately generate different nodes. All attributes and listeners for the HTML and SVG namespace are shuttled through helper structs that essentially compile away (pose no runtime overhead). You can drop in your own elements any time you want, with little hassle. However, you must be absolutely sure your renderer can handle the new type, or it will crash and burn. +If you need to go as far as relying on custom elements for your renderer – you totally can. This still enables you to use Dioxus' reactive nature, component system, shared state, and other features, but will ultimately generate different nodes. All attributes and listeners for the HTML and SVG namespace are shuttled through helper structs that essentially compile away (pose no runtime overhead). You can drop in your own elements any time you want, with little hassle. However, you must be absolutely sure your renderer can handle the new type, or it will crash and burn. These custom elements are defined as unit structs with trait implementations. diff --git a/docs/guide/src/describing_ui/component_children.md b/docs/guide/src/describing_ui/component_children.md new file mode 100644 index 000000000..588c9eb75 --- /dev/null +++ b/docs/guide/src/describing_ui/component_children.md @@ -0,0 +1,31 @@ +# Component Children + +In some cases, you may wish to create a component that acts as a container for some other content, without the component needing to know what that content is. To achieve this, create a prop of type `Element`: + +```rust +{{#include ../../examples/component_element_props.rs:Clickable}} +``` + +Then, when rendering the component, you can pass in the output of `cx.render(rsx!(...))`: + +```rust +{{#include ../../examples/component_element_props.rs:Clickable_usage}} +``` + +> Note: Since `Element<'a>` is a borrowed prop, there will be no memoization. + +> Warning: While it may compile, do not include the same `Element` more than once in the RSX. The resulting behavior is unspecified. + +## The `children` field + +Rather than passing the RSX through a regular prop, you may wish to accept children similarly to how elements can have children. The "magic" `children` prop lets you achieve this: + +```rust +{{#include ../../examples/component_children.rs:Clickable}} +``` + +This makes using the component much simpler: simply put the RSX inside the `{}` brackets – and there is no need for a `render` call or another macro! + +```rust +{{#include ../../examples/component_children.rs:Clickable_usage}} +``` diff --git a/docs/guide/src/describing_ui/component_props.md b/docs/guide/src/describing_ui/component_props.md new file mode 100644 index 000000000..bcf82a6b8 --- /dev/null +++ b/docs/guide/src/describing_ui/component_props.md @@ -0,0 +1,141 @@ +# Component Props + +Just like you can pass arguments to a function, you can pass props to a component that customize its behavior! The components we've seen so far didn't accept any props – so let's write some components that do. + +## `#[derive(Props)]` + +Component props are a single struct annotated with `#[derive(Props)]`. For a component to accept props, the type of its argument must be `Scope`. Then, you can access the value of the props using `cx.props`. + +There are 2 flavors of Props structs: +- Owned props: + - Don't have an associated lifetime + - Implement `PartialEq`, allowing for memoization (if the props don't change, Dioxus won't re-render the component) +- Borrowed props: + - [Borrow](https://doc.rust-lang.org/beta/rust-by-example/scope/borrow.html) from a parent component + - Cannot be memoized due to lifetime constraints + + +### Owned Props + +Owned Props are very simple – they don't borrow anything. Example: + +```rust +{{#include ../../examples/component_owned_props.rs:Likes}} +``` + +You can then pass prop values to the component the same way you would pass attributes to an element: +```rust +{{#include ../../examples/component_owned_props.rs:App}} +``` + +![Screenshot: Likes component](./images/component_owned_props_screenshot.png) + +### Borrowed Props + +Owning props works well if your props are easy to copy around – like a single number. But what if we need to pass a larger data type, like a String from an `App` Component to a `TitleCard` subcomponent? A naive solution might be to [`.clone()`](https://doc.rust-lang.org/std/clone/trait.Clone.html) the String, creating a copy of it for the subcomponent – but this would be inefficient, especially for larger Strings. + +Rust allows for something more efficient – borrowing the String as a `&str` – this is what Borrowed Props are for! + +```rust +{{#include ../../examples/component_borrowed_props.rs:TitleCard}} +``` + +We can then use the component like this: + +```rust +{{#include ../../examples/component_borrowed_props.rs:App}} +``` +![Screenshot: TitleCard component](./images/component_borrowed_props_screenshot.png) + + +## Prop Options + +The `#[derive(Props)]` macro has some features that let you customize the behavior of props. + +### Optional Props + +You can create optional fields by using the `Option<…>` type for a field: + +```rust +{{#include ../../examples/component_props_options.rs:OptionalProps}} +``` + +Then, you can choose to either provide them or not: + +```rust +{{#include ../../examples/component_props_options.rs:OptionalProps_usage}} +``` + +### Explicitly Required `Option`s + +If you want to explicitly require an `Option`, and not an optional prop, you can annotate it with `#[props(!optional)]`: + +```rust +{{#include ../../examples/component_props_options.rs:ExplicitOption}} +``` + +Then, you have to explicitly pass either `Some("str")` or `None`: + +```rust +{{#include ../../examples/component_props_options.rs:ExplicitOption_usage}} +``` + +### Default Props + +You can use `#[props(default = 42)]` to make a field optional and specify its default value: + +```rust +{{#include ../../examples/component_props_options.rs:DefaultComponent}} +``` + +Then, similarly to optional props, you don't have to provide it: + +```rust +{{#include ../../examples/component_props_options.rs:DefaultComponent_usage}} +``` + +### Automatic Conversion with `.into` + +It is common for Rust functions to accept `impl Into` rather than just `SomeType` to support a wider range of parameters. If you want similar functionality with props, you can use `#[props(into)]`. For example, you could add it on a `String` prop – and `&str` will also be automatically accepted, as it can be converted into `String`: + +```rust +{{#include ../../examples/component_props_options.rs:IntoComponent}} +``` + +Then, you can use it so: + +```rust +{{#include ../../examples/component_props_options.rs:IntoComponent_usage}} +``` + +## The `inline_props` macro + +So far, every Component function we've seen had a corresponding ComponentProps struct to pass in props. This was quite verbose... Wouldn't it be nice to have props as simple function arguments? Then we wouldn't need to define a Props struct, and instead of typing `cx.props.whatever`, we could just use `whatever` directly! + +`inline_props` allows you to do just that. Instead of typing the "full" version: + +```rust +#[derive(Props, PartialEq)] +struct TitleCardProps { + title: String, +} + +fn TitleCard(cx: Scope) -> Element { + cx.render(rsx!{ + h1 { "{cx.props.title}" } + }) +} +``` + +...you can define a function that accepts props as arguments. Then, just annotate it with `#[inline_props]`, and the macro will turn it into a regular Component for you: + +```rust +#[inline_props] +fn TitleCard(cx: Scope, title: String) -> Element { + cx.render(rsx!{ + h1 { "{title}" } + }) +} +``` + +> While the new Component is shorter and easier to read, this macro should not be used by library authors since you have less control over Prop documentation. diff --git a/docs/guide/src/describing_ui/components.md b/docs/guide/src/describing_ui/components.md new file mode 100644 index 000000000..c0b35c222 --- /dev/null +++ b/docs/guide/src/describing_ui/components.md @@ -0,0 +1,27 @@ +# Components + +Just like you wouldn't want to write a complex program in a single, long, `main` function, you shouldn't build a complex UI in a single `App` function. Instead, it would be better to break down the functionality of an app in logical parts called components. + +A component is a Rust function, named in UpperCammelCase, that takes a `Scope` parameter and returns an `Element` describing the UI it wants to render. In fact, our `App` function is a component! + +```rust +{{#include ../../examples/hello_world_desktop.rs:component}} +``` + +> You'll probably want to add `#![allow(non_snake_case)]` to the top of your crate to avoid warnings about the function name + +A Component is responsible for some rendering task – typically, rendering an isolated part of the user interface. For example, you could have an `About` component that renders a short description of Dioxus Labs: + +```rust +{{#include ../../examples/components.rs:About}} +``` + +Then, you can render your component in another component, similarly to how elements are rendered: + +```rust +{{#include ../../examples/components.rs:App}} +``` + +![Screenshot containing the About component twice](./images/screenshot_about_component.png) + +> At this point, it might seem like components are nothing more than functions. However, as you learn more about the features of Dioxus, you'll see that they are actually more powerful! diff --git a/docs/guide/src/describing_ui/images/component_borrowed_props_screenshot.png b/docs/guide/src/describing_ui/images/component_borrowed_props_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..6f1864662f34cf7bc4101f2778f0ccb03d1d1646 GIT binary patch literal 7868 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 literal 0 HcmV?d00001 diff --git a/docs/guide/src/describing_ui/images/component_owned_props_screenshot.png b/docs/guide/src/describing_ui/images/component_owned_props_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..2a1146cd1d49b2b54bcb1d103f69a294d3921ec9 GIT binary patch literal 6318 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 literal 0 HcmV?d00001 diff --git a/docs/guide/src/describing_ui/images/screenshot_about_component.png b/docs/guide/src/describing_ui/images/screenshot_about_component.png new file mode 100644 index 0000000000000000000000000000000000000000..36f7250a1bbb007bf4f3cea787319d9df08f7b8d GIT binary patch literal 19470 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 literal 0 HcmV?d00001 diff --git a/docs/guide/src/describing_ui/index.md b/docs/guide/src/describing_ui/index.md new file mode 100644 index 000000000..9e6f0d462 --- /dev/null +++ b/docs/guide/src/describing_ui/index.md @@ -0,0 +1,106 @@ +# Describing the UI + +Dioxus is a *declarative* framework. This means that instead of telling Dioxus what to do (e.g. to "create an element" or "set color to red") we simply *declare* what we want the UI to look like using RSX. + +You have already seen a simple example or RSX syntax in the "hello world" application: + +```rust +{{#include ../../examples/hello_world_desktop.rs:component}} +``` + +Here, we use the `rsx!` macro to *declare* that we want a `div` element, containing the text `"Hello, world!"`. Dioxus takes the RSX and constructs a UI from it. + +## RSX Features + +RSX is very similar to HTML in that it describes elements with attributes and children. Here's an empty `div` element in RSX, as well as the resulting HTML: + +```rust +{{#include ../../examples/rsx_overview.rs:empty}} +``` +```html +

+``` + +### Children + +To add children to an element, put them inside the `{}` brackets. They can be either other elements, or text. For example, you could have an `ol` (ordered list) element, containing 3 `li` (list item) elements, each of which contains some text: + +```rust +{{#include ../../examples/rsx_overview.rs:children}} +``` +```html +
    +
  1. First Item
  2. +
  3. Second Item
  4. +
  5. Third Item
  6. +
+``` + +### Fragments + +You can also "group" elements by wrapping them in `Fragment {}`. This will not create any additional elements. + +> Note: you can also render multiple elements at the top level of `rsx!` and they will be automatically grouped – no need for an explicit `Fragment {}` there. + +```rust +{{#include ../../examples/rsx_overview.rs:fragments}} +``` + +```html +

First Item

+

Second Item

+a group +of three +items +``` + +### Attributes + +Attributes are also specified inside the `{}` brackets, using the `name: value` syntax. You can provide the value as a literal in the RSX: +```rust +{{#include ../../examples/rsx_overview.rs:attributes}} +``` +```html +
Log In +``` + +> Note: All attributes defined in `dioxus-html` follow the snake_case naming convention. They transform their `snake_case` names to HTML's `camelCase` attributes. + +#### Custom Attributes + +Dioxus has a pre-configured set of attributes that you can use. RSX is validated at compile time to make sure you didn't specify an invalid attribute. If you want to override this behavior with a custom attribute name, specify the attribute in quotes: + +```rust +{{#include ../../examples/rsx_overview.rs:custom_attributes}} +``` +```html + + Rust is cool + +``` + +### Interpolation + +Similarly to how you can [format](https://doc.rust-lang.org/rust-by-example/hello/print/fmt.html) Rust strings, you can also interpolate in RSX text. Use `{variable}` to Display the value of a variable in a string, or `{variable:?}` to use the Debug representation: + +```rust +{{#include ../../examples/rsx_overview.rs:formatting}} +``` +```html + +
Coordinates: (42, 0) +
ES
+
42
+
+``` + +### Expressions + +You can include arbitrary Rust expressions within RSX, but you must escape them in `[]` brackets: + +```rust +{{#include ../../examples/rsx_overview.rs:expression}} +``` +```html +DIOXUS +``` \ No newline at end of file diff --git a/docs/guide/src/describing_ui/special_attributes.md b/docs/guide/src/describing_ui/special_attributes.md new file mode 100644 index 000000000..6285e28ef --- /dev/null +++ b/docs/guide/src/describing_ui/special_attributes.md @@ -0,0 +1,63 @@ +# Special Attributes + +While most attributes are simply passed on to the HTML, some have special behaviors. + +## The HTML Escape Hatch + +If you're working with pre-rendered assets, output from templates, or output from a JS library, then you might want to pass HTML directly instead of going through Dioxus. In these instances, reach for `dangerous_inner_html`. + +For example, shipping a markdown-to-Dioxus converter might significantly bloat your final application size. Instead, you'll want to pre-render your markdown to HTML and then include the HTML directly in your output. We use this approach for the [Dioxus homepage](https://dioxuslabs.com): + + +```rust +{{#include ../../examples/dangerous_inner_html.rs:dangerous_inner_html}} +``` + +> Note! This attribute is called "dangerous_inner_html" because it is **dangerous** to pass it data you don't trust. If you're not careful, you can easily expose [cross-site scripting (XSS)](https://en.wikipedia.org/wiki/Cross-site_scripting) attacks to your users. +> +> If you're handling untrusted input, make sure to sanitize your HTML before passing it into `dangerous_inner_html` – or just pass it to a Text Element to escape any HTML tags. + + +## Boolean Attributes + +Most attributes, when rendered, will be rendered exactly as the input you provided. However, some attributes are considered "boolean" attributes and just their presence determines whether they affect the output. For these attributes, a provided value of `"false"` will cause them to be removed from the target element. + +So this RSX wouldn't actually render the `hidden` attribute: + +```rust +{{#include ../../examples/boolean_attribute.rs:boolean_attribute}} +``` +```html +
hello
+``` + +Not all attributes work like this however. *Only the following attributes* have this behavior: + +- `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` + +For any other attributes, a value of `"false"` will be sent directly to the DOM. diff --git a/docs/guide/src/elements/conditional_rendering.md b/docs/guide/src/elements/conditional_rendering.md deleted file mode 100644 index f5d2836f3..000000000 --- a/docs/guide/src/elements/conditional_rendering.md +++ /dev/null @@ -1,184 +0,0 @@ -# Conditional Rendering - -Your components will often need to display different things depending on different conditions. With Dioxus, we can use Rust's normal control flow to conditionally hide, show, and modify the structure of our markup. - -In this chapter, you'll learn: -- How to return different Elements depending on a condition -- How to conditionally include an Element in your structure -- Common patterns like matching and bool mapping - -## Conditionally returning Elements - -In some components, you might want to render different markup given some condition. The typical example for conditional rendering is showing a "Log In" screen for users who aren't logged into your app. To break down this condition, we can consider two states: - -- Logged in: show the app -- Logged out: show the login screen - -Using the knowledge from the previous section on components, we'll start by making the app's props: - -```rust -#[derive(Props, PartialEq)] -struct AppProps { - logged_in: bool -} -``` - -Now that we have a "logged_in" flag accessible in our props, we can render two different screens: - -```rust -fn App(cx: Scope) -> Element { - if cx.props.logged_in { - cx.render(rsx!{ - DashboardScreen {} - }) - } else { - cx.render(rsx!{ - LoginScreen {} - }) - } -} -``` - -When the user is logged in, then this component will return the DashboardScreen. If they're not logged in, the component will render the LoginScreen. - -## Using match statements - -Rust provides us algebraic datatypes: enums that can contain values. Using the `match` keyword, we can execute different branches of code given a condition. - -For instance, we could run a function that returns a Result: - -```rust -fn App(cx: Scope)-> Element { - match get_name() { - Ok(name) => cx.render(rsx!( "Hello, {name}!" )), - Err(err) => cx.render(rsx!( "Sorry, I don't know your name, because an error occurred: {err}" )), - } -} -``` - -We can even match against values: -```rust -fn App(cx: Scope)-> Element { - match get_name() { - "jack" => cx.render(rsx!( "Hey Jack, how's Diane?" )), - "diane" => cx.render(rsx!( "Hey Diane, how's Jack?" )), - name => cx.render(rsx!( "Hello, {name}!" )), - } -} -``` - -Do note: the `rsx!` macro does not return an Element, but rather a wrapper struct for a `Closure` (an anonymous function). To turn our `rsx!` into an Element, we need to call `cx.render`. - -To make patterns like these less verbose, the `rsx!` macro accepts an optional first argument on which it will call `render`. Our previous component can be shortened with this alternative syntax: - -```rust -fn App(cx: Scope)-> Element { - match get_name() { - "jack" => rsx!(cx, "Hey Jack, how's Diane?" ), - "diane" => rsx!(cx, "Hey Diana, how's Jack?" ), - name => rsx!(cx, "Hello, {name}!" ), - } -} -``` - -Alternatively, for match statements, we can just return the builder itself and pass it into a final, single call to `cx.render`: - -```rust -fn App(cx: Scope)-> Element { - let greeting = match get_name() { - "jack" => rsx!("Hey Jack, how's Diane?" ), - "diane" => rsx!("Hey Diana, how's Jack?" ), - name => rsx!("Hello, {name}!" ), - }; - cx.render(greeting) -} -``` - -## Nesting RSX - -By looking at other examples, you might have noticed that it's possible to include `rsx!` calls inside other `rsx!` calls. We can include anything in our `rsx!` that implements `IntoVnodeList`: a marker trait for iterators that produce Elements. `rsx!` itself implements this trait, so we can include it directly: - -```rust -rsx!( - div { - rsx!( - "more rsx!" - ) - } -) -``` - -As you might expect, we can refactor this structure into two separate calls using variables: - -```rust -let title = rsx!( "more rsx!" ); - -rsx!( - div { - title - } -) -``` - -In the case of a log-in screen, we might want to display the same NavBar and Footer for both logged in and logged out users. We can model this entirely by assigning a `screen` variable to a different Element depending on a condition: - - -```rust -let screen = match logged_in { - true => rsx!(DashboardScreen {}), - false => rsx!(LoginScreen {}) -}; - -cx.render(rsx!{ - Navbar {} - screen, - Footer {} -}) -``` - -## Rendering Nothing - -Sometimes, you don't want your component to return anything at all. Under the hood, the `Element` type is just an alias for `Option`, so you can simply return `None`. - -This can be helpful in certain patterns where you need to perform some logical side-effects but don't want to render anything. - -```rust -fn demo(cx: Scope) -> Element { - None -} -``` - -## Boolean Mapping - -In the spirit of highly-functional apps, we suggest using the "boolean mapping" pattern when trying to conditionally hide/show an Element. - -By default, Rust lets you convert any `boolean` into an Option of any other type with [`then()`](https://doc.rust-lang.org/std/primitive.bool.html#method.then). We can use this in Components by mapping to some Element. - -```rust -let show_title = true; -rsx!( - div { - // Renders nothing by returning None when show_title is false - show_title.then(|| rsx!{ - "This is the title" - }) - } -) -``` - -We can use this pattern for many things, including options: -```rust -let user_name = Some("bob"); -rsx!( - div { - // Renders nothing if user_name is None - user_name.map(|name| rsx!("Hello {name}")) - } -) -``` - -## Moving Forward: - -In this chapter, we learned how to render different Elements from a Component depending on a condition. This is a very powerful building block to assemble complex user interfaces! - -In the next chapter, we'll cover how to renderer lists inside your `rsx!`. diff --git a/docs/guide/src/elements/index.md b/docs/guide/src/elements/index.md deleted file mode 100644 index c814945d1..000000000 --- a/docs/guide/src/elements/index.md +++ /dev/null @@ -1,73 +0,0 @@ -# Core Topics - -In this chapter, we'll cover some core topics about how Dioxus works and how to best leverage the features to build a beautiful, reactive app. - -At a very high level, Dioxus is simply a Rust framework for _declaring_ user interfaces and _reacting_ to changes. - -1) We declare what we want our user interface to look like given a state using Rust-based logic and control flow. -2) We declare how we want our state to change when the user triggers an event. - -## Declarative UI - -Dioxus is a *declarative* framework. This means that instead of manually writing calls to "create element" and "set element background to red," we simply *declare* what we want the element to look like and let Dioxus handle the differences. - -Let's pretend that we have a stoplight we need to control - it has a color state with red, yellow, and green as options. - - -Using an imperative approach, we would have to manually declare each element and then handlers for advancing the stoplight. - -```rust -let container = Container::new(); - -let green_light = Light::new().color("green").enabled(true); -let yellow_light = Light::new().color("yellow").enabled(false); -let red_light = Light::new().color("red").enabled(false); -container.push(green_light); -container.push(yellow_light); -container.push(red_light); - -container.set_onclick(move |_| { - if red_light.enabled() { - red_light.set_enabled(false); - green_light.set_enabled(true); - } else if yellow_light.enabled() { - yellow_light.set_enabled(false); - red_light.set_enabled(true); - } else if green_light.enabled() { - green_light.set_enabled(false); - yellow_light.set_enabled(true); - } -}); -``` - -As the UI grows in scale, our logic to keep each element in the proper state would grow exponentially. This can become very unwieldy and lead to out-of-sync UIs that harm user experience. - -Instead, with Dioxus, we *declare* what we want our UI to look like: - -```rust -let mut state = use_state(&cx, || "red"); - -cx.render(rsx!( - Container { - Light { color: "red", enabled: state == "red", } - Light { color: "yellow", enabled: state == "yellow", } - Light { color: "green", enabled: state == "green", } - - onclick: move |_| { - state.set(match *state { - "green" => "yellow", - "yellow" => "red", - "red" => "green", - }) - } - } -)) -``` - -Remember: this concept is not new! Many frameworks are declarative - with React being the most popular. Declarative frameworks tend to be much more enjoyable to work with than imperative frameworks. - -Here's some reading about declaring UI in React: - -- [Difference between declarative and imperative in React.js](https://stackoverflow.com/questions/33655534/difference-between-declarative-and-imperative-in-react-js), a StackOverflow thread - -- [Declarative vs Imperative](https://medium.com/@myung.kim287/declarative-vs-imperative-251ce99c6c44), a blog post by Myung Kim diff --git a/docs/guide/src/elements/lists.md b/docs/guide/src/elements/lists.md deleted file mode 100644 index 9f8a8072c..000000000 --- a/docs/guide/src/elements/lists.md +++ /dev/null @@ -1,145 +0,0 @@ -# Conditional Lists and Keys - -You will often want to display multiple similar components from a collection of data. - -In this chapter, you will learn: - -- How to use iterators in `rsx!` -- How to filter and transform data into a list of Elements -- How to create efficient lists with keys - -## Rendering data from lists - -If we wanted to build the Reddit app, then we need to implement a list of data that needs to be rendered: the list of posts. This list of posts is always changing, so we cannot just hardcode the lists into our app directly, like so: - -```rust -// we shouldn't ship our app with posts that don't update! -rsx!( - div { - Post { - title: "Post A", - votes: 120, - } - Post { - title: "Post B", - votes: 14, - } - Post { - title: "Post C", - votes: 999, - } - } -) -``` - -Instead, we need to transform the list of data into a list of Elements. - -For convenience, `rsx!` supports any type in curly braces that implements the `IntoVnodeList` trait. Conveniently, every iterator that returns something that can be rendered as an Element also implements `IntoVnodeList`. - -As a simple example, let's render a list of names. First, start with our input data: - -```rust -let names = ["jim", "bob", "jane", "doe"]; -``` - -Then, we create a new iterator by calling `iter` and then [`map`](https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.map). In our `map` function, we'll render our template. - -```rust -let name_list = names.iter().map(|name| rsx!( - li { "{name}" } -)); -``` - -We can include this list in the final Element: - -```rust -rsx!( - ul { - name_list - } -) -``` - -Rather than storing `name_list` in a temporary variable, we could also include the iterator inline: -```rust -rsx!( - ul { - names.iter().map(|name| rsx!( - li { "{name}" } - )) - } -) -``` - -The rendered HTML list is what you would expect: -```html -
    -
  • jim
  • -
  • bob
  • -
  • jane
  • -
  • doe
  • -
-``` - -## Filtering Iterators - -Rust's iterators are extremely powerful, especially when used for filtering tasks. When building user interfaces, you might want to display a list of items filtered by some arbitrary check. - -As a very simple example, let's set up a filter where we only list names that begin with the letter "j". - -Using the list from above, let's create a new iterator. Before we render the list with `map` as in the previous example, we'll [`filter`](https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.filter) the names to only allow those that start with "j". - -```rust -let name_list = names - .iter() - .filter(|name| name.starts_with('j')) - .map(|name| rsx!( li { "{name}" })); -``` - -Rust's Iterators are very versatile – check out [their documentation](https://doc.rust-lang.org/std/iter/trait.Iterator.html) for more things you can do with them! - -For keen Rustaceans: notice how we don't actually call `collect` on the name list. If we `collect`ed our filtered list into new Vec, we would need to make an allocation to store these new elements, which slows down rendering. Instead, we create an entirely new _lazy_ iterator which Dioxus will consume in the `render` call. The `render` method is extraordinarily efficient, so it's best practice to let it do most of the allocations for us. - -## Keeping list items in order with `key` - -The examples above demonstrate the power of iterators in `rsx!` but all share the same issue: if your array items move (e.g. due to sorting), get inserted, or get deleted, Dioxus has no way of knowing what happened. This can cause Elements to be unnecessarily removed, changed and rebuilt when all that was needed was to change their position – this is inefficient. - -To solve this problem, each item in the list must be **uniquely identifiable**. You can achieve this by giving it a unique, fixed "key". In Dioxus, a key is a string that identifies an item among others in the list. - -```rust -rsx!( li { key: "a" } ) -``` - -Now, if an item has already been rendered once, Dioxus can use the key to match it up later to make the correct updates – and avoid unnecessary work. - -NB: the language from this section is strongly borrowed from [React's guide on keys](https://reactjs.org/docs/lists-and-keys.html). - -### Where to get your key - -Different sources of data provide different sources of keys: - -- _Data from a database_: If your data is coming from a database, you can use the database keys/IDs, which are unique by nature. -- _Locally generated data_: If your data is generated and persisted locally (e.g. notes in a note-taking app), keep track of keys along with your data. You can use an incrementing counter or a package like `uuid` to generate keys for new items – but make sure they stay the same for the item's lifetime. - -Remember: keys let Dioxus uniquely identify an item among its siblings. A well-chosen key provides more information than the position within the array. Even if the position changes due to reordering, the key lets Dioxus identify the item throughout its lifetime. - -### Rules of keys - -- Keys must be unique among siblings. However, it’s okay to use the same keys for Elements in different arrays. -- An item's key must not change – **don’t generate them on the fly** while rendering. Otherwise, Dioxus will be unable to keep track of which item is which, and we're back to square one. - -You might be tempted to use an item's index in the array as its key. In fact, that’s what Dioxus will use if you don’t specify a key at all. This is only acceptable if you can guarantee that the list is constant – i.e., no re-ordering, additions or deletions. In all other cases, do not use the index for the key – it will lead to the performance problems described above. - -Note that if you pass the key to a [custom component](../components/index.md) you've made, it won't receive the key as a prop. It’s only used as a hint by Dioxus itself. If your component needs an ID, you have to pass it as a separate prop: -```rust -Post { key: "{key}", id: "{key}" } -``` - -## Moving on - -In this section, we learned: -- How to render lists of data -- How to use iterator tools to filter and transform data -- How to use keys to render lists efficiently - -Moving forward, we'll learn more about attributes. diff --git a/docs/guide/src/elements/special_attributes.md b/docs/guide/src/elements/special_attributes.md deleted file mode 100644 index 7b4e1ba40..000000000 --- a/docs/guide/src/elements/special_attributes.md +++ /dev/null @@ -1,191 +0,0 @@ -# Special Attributes - -Dioxus tries its hardest to stay close to React, but there are some divergences and "special behavior" that you should review before moving on. - -In this section, we'll cover special attributes built into Dioxus: - -- `dangerous_inner_html` -- Boolean attributes -- `prevent_default` -- event handlers as string attributes -- `value`, `checked`, and `selected` - -## The HTML escape hatch: `dangerous_inner_html` - -One thing you might've missed from React is the ability to render raw HTML directly to the DOM. If you're working with pre-rendered assets, output from templates, or output from a JS library, then you might want to pass HTML directly instead of going through Dioxus. In these instances, reach for `dangerous_inner_html`. - -For example, shipping a markdown-to-Dioxus converter might significantly bloat your final application size. Instead, you'll want to pre-render your markdown to HTML and then include the HTML directly in your output. We use this approach for the [Dioxus homepage](https://dioxuslabs.com): - - -```rust -fn BlogPost(cx: Scope) -> Element { - let contents = include_str!("../post.html"); - cx.render(rsx!{ - div { - class: "markdown", - dangerous_inner_html: "{contents}", - } - }) -} -``` - -> Note! This attribute is called "dangerous_inner_html" because it is **dangerous** to pass it data you don't trust. If you're not careful, you can easily expose cross-site-scripting (XSS) attacks to your users. -> -> If you're handling untrusted input, make sure to sanitize your HTML before passing it into `dangerous_inner_html` – or just pass it to a Text Element to escape any HTML tags. - - -## Boolean Attributes - -Most attributes, when rendered, will be rendered exactly as the input you provided. However, some attributes are considered "boolean" attributes and just their presence determines whether or not they affect the output. For these attributes, a provided value of `"false"` will cause them to be removed from the target element. - -So this RSX: - -```rust -rsx!{ - div { - hidden: "false", - "hello" - } -} -``` -wouldn't actually render the `hidden` attribute: -```html -
hello
-``` - -Not all attributes work like this however. *Only the following attributes* have this behavior: - -- `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` - -For any other attributes, a value of `"false"` will be sent directly to the DOM. - -## Stopping form input and navigation with `prevent_default` - -Currently, calling `prevent_default` on events in EventHandlers is not possible from Desktop/Mobile. Until this is supported, it's possible to prevent default using the `prevent_default` attribute. - -> Note: you cannot conditionally prevent default with this approach. This is a limitation until synchronous event handling is available across the Webview boundary - -To use `prevent_default`, simply attach the `prevent_default` attribute to a given element and set it to the name of the event handler you want to prevent default on. We can attach this attribute multiple times for multiple attributes. - -```rust -rsx!{ - input { - oninput: move |_| {}, - prevent_default: "oninput", - - onclick: move |_| {}, - prevent_default: "onclick", - } -} -``` - - -## Controlled inputs and `value`, `checked`, and `selected` - -In Dioxus, there is a distinction between controlled and uncontrolled inputs. Most inputs you'll use are controlled, meaning we both drive the `value` of the input and react to the `oninput`. - -Controlled components: -```rust -let value = use_state(&cx, || String::from("hello world")); - -rsx! { - input { - oninput: move |evt| value.set(evt.value.clone()), - value: "{value}", - } -} -``` - -With uncontrolled inputs, we won't actually drive the value from the component. This has its advantages when we don't want to re-render the component when the user inputs a value. We could either select the element directly - something Dioxus doesn't support across platforms - or we could handle `oninput` and modify a value without causing an update: - -```rust -let value = use_ref(&cx, || String::from("hello world")); - -rsx! { - input { - oninput: move |evt| *value.write_silent() = evt.value.clone(), - // no "value" is driven here – the input keeps track of its own value, and you can't change it - } -} -``` - -## Strings for handlers like `onclick` - -For element fields that take a handler like `onclick` or `oninput`, Dioxus will let you attach a closure. Alternatively, you can also pass a string using normal attribute syntax and assign this attribute on the DOM. - -This lets you use JavaScript (only if your renderer can execute JavaScript). - -```rust -rsx!{ - div { - // handle oninput with rust - oninput: move |_| {}, - - // or handle oninput with javascript - oninput: "alert('hello world')", - } -} - -``` - -## Wrapping up - -In this chapter, we learned: -- How to declare elements -- How to conditionally render parts of your UI -- How to render lists -- Which attributes are "special" - - diff --git a/docs/guide/src/elements/vnodes.md b/docs/guide/src/elements/vnodes.md deleted file mode 100644 index 5312306f0..000000000 --- a/docs/guide/src/elements/vnodes.md +++ /dev/null @@ -1,175 +0,0 @@ -# Declaring your first UI with Elements - -Every user interface you've ever used is just a symphony of tiny widgets working together to abstract over larger complex functions. In Dioxus, we call these tiny widgets "Elements." Using Components, you can easily compose Elements into larger groups to form even larger structures: Apps. - -In this chapter, we'll cover: -- Declaring our first Element -- Composing Elements together -- Element properties - -## Declaring our first Element - -Because Dioxus is mostly used with HTML/CSS renderers, the default Element "collection" is HTML. Provided the `html` feature is not disabled, we can declare Elements using the `rsx!` macro: - -```rust -rsx!( - div {} -) -``` -As you might expect, we can render this call using Dioxus-SSR to produce valid HTML: - -```rust -dioxus::ssr::render_lazy(rsx!( - div {} -)) -``` - -Produces: -```html -
-``` - -We can construct any valid HTML tag with the `tag {}` pattern and expect the resulting HTML structure to resemble our declaration. - -## Composing Elements - -Of course, we need more complex structures to make our apps actually useful! Just like HTML, the `rsx!` macro lets us nest Elements inside of each other. - -```rust -#use dioxus::prelude::*; -rsx!( - div { - h1 {} - h2 {} - p {} - } -) -``` -As you might expect, the generated HTML for this structure would look like: -```html -
-

-

-

-
-``` - -With the default configuration, any Element defined within the `dioxus-html` crate can be declared in this way. To create your own new elements, see the `Custom Elements` Advanced Guide. - -## Text Elements - -Dioxus also supports a special type of Element: Text. Text Elements do not accept children, just a string literal denoted by double quotes. - -```rust -rsx! ( - "hello world" -) -``` - -Text Elements can be composed within other Elements: -```rust -rsx! ( - div { - h1 { "hello world" } - p { "Some body content" } - } -) -``` - -Text can also be formatted with any value that implements `Display`. We use the same syntax as Rust [format strings](https://www.rustnote.com/blog/format_strings.html) – which will already be familiar for Python and JavaScript users: - -```rust -let name = "Bob"; -rsx! ( "hello {name}" ) -``` - -Unfortunately, you cannot yet drop in arbitrary expressions directly into the string literal with Rust. In the cases where we need to compute a complex value, we'll want to use `format_args!` directly. Due to specifics of the `rsx!` macro (which we'll cover later), our call to `format_args` must be contained within square braces. - -```rust -rsx!( [format_args!("Hello {}", if enabled { "Jack" } else { "Bob" } )] ) -``` - -Alternatively, `&str` can be included directly, though it must also be inside square braces: - -```rust -rsx!( "Hello ", [if enabled { "Jack" } else { "Bob" }] ) -``` - -This is different from React's way of generating arbitrary markup but fits within idiomatic Rust. - -Typically, with Dioxus, you'll just want to compute your substrings outside of the `rsx!` call and leverage the f-string formatting: - -```rust -let name = if enabled { "Jack" } else { "Bob" }; -rsx! ( "hello {name}" ) -``` - -## Attributes - -Every Element in your user interface will have some sort of properties that the renderer will use when drawing to the screen. These might inform the renderer if the component should be hidden, what its background color should be, or to give it a specific name or ID. - -To do this, we use the familiar struct-style syntax that Rust provides: - -```rust -rsx!( - div { - hidden: "true", - background_color: "blue", - class: "card color-{mycolor}" - } -) -``` - -Each field is defined as a method on the element in the `dioxus-html` crate. This prevents you from misspelling a field name and lets us provide inline documentation. When you need to use a field not defined as a method, you have two options: - -1) file an issue if the attribute _should_ be enabled -2) add a custom attribute on-the-fly - -To use custom attributes, simply put the attribute name in quotes: - -```rust -rsx!( - div { - "customAttr": "important data here" - } -) -``` - -> Note: the name of the custom attribute must match exactly what you want the renderer to output. All attributes defined as methods in `dioxus-html` follow the snake_case naming convention. However, they internally translate their snake_case convention to HTML's camelCase convention. When using custom attributes, make sure the name of the attribute **exactly** matches what the renderer is expecting. - -All element attributes must occur *before* child elements. The `rsx!` macro will throw an error if your child elements come before any of your attributes. If you don't see the error, try editing your Rust-Analyzer IDE setting to ignore macro-errors. This is a temporary workaround because Rust-Analyzer currently throws *two* errors instead of just the one we care about. - -```rust -// settings.json -{ - "rust-analyzer.diagnostics.disabled": [ - "macro-error" - ], -} -``` - -## Listeners - -Listeners are a special type of Attribute that only accept functions. Listeners let us attach functionality to our Elements by running a provided closure whenever the specified Listener is triggered. - -We'll cover listeners in more depth in the Adding Interactivity chapter, but for now, just know that every listener starts with "on" and accepts closures. - -```rust -rsx!( - div { - onclick: move |_| log::debug!("div clicked!"), - } -) -``` - -## Moving On - -This chapter just scratches the surface on how Elements can be defined. - -We learned: -- Elements are the basic building blocks of User Interfaces -- Elements can contain other elements -- Elements can either be a named container or text -- Some Elements have properties that the renderer can use to draw the UI to the screen - -Next, we'll compose Elements together using Rust-based logic. diff --git a/docs/guide/src/final.md b/docs/guide/src/final.md deleted file mode 100644 index 41449edc7..000000000 --- a/docs/guide/src/final.md +++ /dev/null @@ -1,49 +0,0 @@ -# Congrats! - -Congrats! You've made it through the `learning Dioxus` book. Throughout this tutorial, you've learned a ton: - -- How to build User Interfaces with Elements -- How to compose Element groups together as Components -- How to handle user input with event listeners -- How to manage local and global state -- How to work with async using tasks, coroutines, and suspense -- How to build custom hooks and handlers - -With any luck, you followed through the "Putting it All Together" mini guide and have your very own dog search engine app! - -# Next Steps and Advanced Topics - -Continuing on your journey with Dioxus, you can try a number of things: - -- Build a simple TUI app -- Publish your search engine app -- Deploy a WASM app to GitHub -- Design a custom hook -- Contribute to the ecosystem! - -There are a number of advanced topics we glossed over: - -- The underlying NodeFactory API -- Static elements and templates -- Anti-patterns -- Bundling/distribution -- Working with wasm apps - -# Contributing to the ecosystem - -Dioxus is still quite young and could use your help! - -The core team is actively working on: - -- Declarative window management (via Tauri) for Desktop apps -- Portals for Dioxus Core -- Mobile support -- Integration with 3D renderers -- Better async story (suspense, error handling) -- Global state management -- Web development server -- LiveView -- Broader platform support (iOS/Android/TV/embedded) - -If there's something specifically interesting to you, don't be afraid to jump in! - diff --git a/docs/guide/src/getting_started/desktop.md b/docs/guide/src/getting_started/desktop.md new file mode 100644 index 000000000..8fec4aa00 --- /dev/null +++ b/docs/guide/src/getting_started/desktop.md @@ -0,0 +1,45 @@ +# Desktop Application + +Build a standalone native desktop app that looks and feels the same across operating systems. + +Apps built with Dioxus are typically <5mb in size and use existing system resources, so they won't hog extreme amounts of RAM or memory. + +Examples: +- [File explorer](https://github.com/DioxusLabs/example-projects/blob/master/file-explorer) +- [WiFi scanner](https://github.com/DioxusLabs/example-projects/blob/master/wifi-scanner) + +[![File ExplorerExample](https://raw.githubusercontent.com/DioxusLabs/example-projects/master/file-explorer/image.png)](https://github.com/DioxusLabs/example-projects/tree/master/file-explorer) + +## Support + +The desktop is a powerful target for Dioxus, but is currently limited in capability when compared to the Web platform. Currently, desktop apps are rendered with the platform's WebView library, but your Rust code is running natively on a native thread. This means that browser APIs are *not* available, so rendering WebGL, Canvas, etc is not as easy as the Web. However, native system APIs *are* accessible, so streaming, WebSockets, filesystem, etc are all viable APIs. In the future, we plan to move to a custom webrenderer-based DOM renderer with WGPU integrations. + +Dioxus Desktop is built off [Tauri](https://tauri.app/). Right now there aren't any Dioxus abstractions over keyboard shortcuts, menubar, handling, etc, so you'll want to leverage Tauri – mostly [Wry](http://github.com/tauri-apps/wry/) and [Tao](http://github.com/tauri-apps/tao)) directly. + +## Creating a Project + +Create a new crate: + +```shell +cargo new --bin demo +cd demo +``` + +Add Dioxus with the `desktop` feature (this will edit `Cargo.toml`): + +```shell +cargo add dioxus --features desktop +``` + +> If your system does not provide the `libappindicator3` library, like Debian/bullseye, you can enable the replacement `ayatana` with an additional flag: +> +>```shell +># On Debian/bullseye use: +>cargo add dioxus --features desktop --features ayatana +>``` + +Edit your `main.rs`: + +```rust +{{#include ../../examples/hello_world_desktop.rs:all}} +``` diff --git a/docs/reference/src/guide/hot_reloading.md b/docs/guide/src/getting_started/hot_reload.md similarity index 97% rename from docs/reference/src/guide/hot_reloading.md rename to docs/guide/src/getting_started/hot_reload.md index 8560c62f9..e5d7b0327 100644 --- a/docs/reference/src/guide/hot_reloading.md +++ b/docs/guide/src/getting_started/hot_reload.md @@ -1,4 +1,5 @@ -# Hot Reloading +# Setting Up Hot Reload + 1. Hot reloading allows much faster iteration times inside of rsx calls by interperting them and streaming the edits. 2. It is useful when changing the styling/layout of a program, but will not help with changing the logic of a program. 3. Currently the cli only implements hot reloading for the web renderer. diff --git a/docs/guide/src/getting_started/index.md b/docs/guide/src/getting_started/index.md new file mode 100644 index 000000000..6b4937453 --- /dev/null +++ b/docs/guide/src/getting_started/index.md @@ -0,0 +1,74 @@ +# Getting Started + +This section will help you set up your Dioxus project! + +## Prerequisites + +### An Editor + +Dioxus integrates very well with the [Rust-Analyzer LSP plugin](https://rust-analyzer.github.io) which will provide appropriate syntax highlighting, code navigation, folding, and more. + +### Rust + +Head over to [https://rust-lang.org](http://rust-lang.org) and install the Rust compiler. + +We strongly recommend going through the [official Rust book](https://doc.rust-lang.org/book/ch01-00-getting-started.html) _completely_. However, our hope is that a Dioxus app can serve as a great first Rust project. With Dioxus, you'll learn about: + +- Error handling +- Structs, Functions, Enums +- Closures +- Macros + +We've put a lot of care into making Dioxus syntax familiar and easy to understand, so you won't need deep knowledge on async, lifetimes, or smart pointers until you really start building complex Dioxus apps. + +### Platform-Specific Dependencies + +#### Windows + +Windows Desktop apps depend on WebView2 – a library which should be installed in all modern Windows distributions. If you have Edge installed, then Dioxus will work fine. If you *don't* have Webview2, [then you can install it through Microsoft](https://developer.microsoft.com/en-us/microsoft-edge/webview2/). MS provides 3 options: + +1. A tiny "evergreen" *bootstrapper* which will fetch an installer from Microsoft's CDN +2. A tiny *installer* which will fetch Webview2 from Microsoft's CDN +3. A statically linked version of Webview2 in your final binary for offline users + +For development purposes, use Option 1. + +#### Linux + +Webview Linux apps require WebkitGtk. When distributing, this can be part of your dependency tree in your `.rpm` or `.deb`. However, it's very likely that your users will already have WebkitGtk. + +```bash +sudo apt install libwebkit2gtk-4.0-dev libgtk-3-dev libappindicator3-dev +``` + +When using Debian/bullseye `libappindicator3-dev` is no longer available but replaced by `libayatana-appindicator3-dev`. + +```bash +# on Debian/bullseye use: +sudo apt install libwebkit2gtk-4.0-dev libgtk-3-dev libayatana-appindicator3-dev +``` + +If you run into issues, make sure you have all the basics installed, as outlined in the [Tauri docs](https://tauri.studio/v1/guides/getting-started/prerequisites#setting-up-linux). + + +#### MacOS + +Currently – everything for macOS is built right in! However, you might run into an issue if you're using nightly Rust due to some permissions issues in our Tao dependency (which have been resolved but not published). + +### Suggested Cargo Extensions + +If you want to keep your traditional `npm install XXX` workflow for adding packages, you might want to install `cargo-edit` and a few other fun `cargo` extensions: + +- [cargo-expand](https://github.com/dtolnay/cargo-expand) for expanding macro calls +- [cargo tree](https://doc.rust-lang.org/cargo/commands/cargo-tree.html) – an integrated cargo command that lets you inspect your dependency tree + + +## Setup Guides + +Dioxus supports multiple platforms. Depending on what you want, the setup is a bit different. + +- [Web](web.md): running in the browser using WASM +- [Server Side Rendering](ssr.md): render Dioxus HTML as text +- [Desktop](desktop.md): a standalone app using webview +- [Mobile](mobile.md) +- [Terminal UI](tui.md): terminal text-based graphic interface \ No newline at end of file diff --git a/docs/reference/src/platforms/mobile.md b/docs/guide/src/getting_started/mobile.md similarity index 59% rename from docs/reference/src/platforms/mobile.md rename to docs/guide/src/getting_started/mobile.md index 193487885..0dffdac30 100644 --- a/docs/reference/src/platforms/mobile.md +++ b/docs/guide/src/getting_started/mobile.md @@ -1,11 +1,15 @@ -# Getting started: mobile +# Mobile App +Build a mobile app with Dioxus! -Dioxus is unique in that it actually supports mobile. However, support is very young and you might need to dip down into some of the primitives until better support is ready. +Example: [Todo App](https://github.com/DioxusLabs/example-projects/blob/master/ios_demo) -Currently, only iOS is supported through us, however you *can* add android support by following the same instructions below by using the `android` guide in `cargo-mobile`. +## Support +Mobile is currently the least-supported renderer target for Dioxus. Mobile apps are rendered with the platform's WebView, meaning that animations, transparency, and native widgets are not currently achievable. -Also, Dioxus Desktop and Dioxus Mobile share the same codebase, and dioxus-mobile currently just re-exports dioxus-desktop. +In addition, iOS is the only supported Mobile Platform. It is possible to get Dioxus running on Android and rendered with WebView, but the Rust windowing library that Dioxus uses – tao – does not currently support Android. + +Mobile support is currently best suited for CRUD-style apps, ideally for internal teams who need to develop quickly but don't care much about animations or native widgets. ## Getting Set up @@ -14,14 +18,13 @@ Getting set up with mobile can be quite challenging. The tooling here isn't grea We're going to be using `cargo-mobile` to build for mobile. First, install it: ```shell -$ cargo install --git https://github.com/BrainiumLLC/cargo-mobile +cargo install --git https://github.com/BrainiumLLC/cargo-mobile ``` - And then initialize your app for the right platform. Use the `winit` template for now. Right now, there's no "Dioxus" template in cargo-mobile. ```shell -$ cargo mobile init +cargo mobile init ``` We're going to completely clear out the `dependencies` it generates for us, swapping out `winit` with `dioxus-mobile`. @@ -55,7 +58,6 @@ simple_logger = "*" Edit your `lib.rs`: ```rust -// main.rs use dioxus::prelude::*; fn main() { @@ -70,9 +72,3 @@ fn app(cx: Scope) -> Element { }) } ``` - -To configure the webview, menubar, and other important desktop-specific features, checkout out some of the launch configuration in the [API reference](https://docs.rs/dioxus-mobile/). - -## Future Steps - -Make sure to read the [Dioxus Guide](https://dioxuslabs.com/guide) if you already haven't! diff --git a/docs/reference/src/platforms/ssr.md b/docs/guide/src/getting_started/ssr.md similarity index 68% rename from docs/reference/src/platforms/ssr.md rename to docs/guide/src/getting_started/ssr.md index 09e32ba43..0b6ca0701 100644 --- a/docs/reference/src/platforms/ssr.md +++ b/docs/guide/src/getting_started/ssr.md @@ -1,6 +1,17 @@ -# Getting Started: Server-Side-Rendering +# Server-Side Rendering + +The Dioxus VirtualDom can be rendered server-side. + +[Example: Dioxus DocSite](https://github.com/dioxusLabs/docsite) + +## Multithreaded Support + +The Dioxus VirtualDom, sadly, is not currently `Send`. Internally, we use quite a bit of interior mutability which is not thread-safe. This means you can't easily use Dioxus with most web frameworks like Tide, Rocket, Axum, etc. + +To solve this, you'll want to spawn a VirtualDom on its own thread and communicate with it via channels. + +When working with web frameworks that require `Send`, it is possible to render a VirtualDom immediately to a String – but you cannot hold the VirtualDom across an await point. For retained-state SSR (essentially LiveView), you'll need to create a pool of VirtualDoms. -The Dioxus VirtualDom can be rendered to a string by traversing the Element Tree. This is implemented in the `ssr` crate where your Dioxus app can be directly rendered to HTML to be served by a web server. ## Setup @@ -21,21 +32,21 @@ However, for this guide, we're going to show how to use Dioxus SSR with `Axum`. Make sure you have Rust and Cargo installed, and then create a new project: ```shell -$ cargo new --bin demo -$ cd app +cargo new --bin demo +cd app ``` Add Dioxus with the `ssr` feature: ```shell -$ cargo add dioxus --features ssr +cargo add dioxus --features ssr ``` Next, add all the Axum dependencies. This will be different if you're using a different Web Framework ``` -$ cargo add tokio --features full -$ cargo add axum +cargo add tokio --features full +cargo add axum ``` Your dependencies should look roughly like this: @@ -47,7 +58,7 @@ dioxus = { version = "*", features = ["ssr"] } tokio = { version = "1.15.0", features = ["full"] } ``` -Now, setup your Axum app to respond on an endpoint. +Now, set up your Axum app to respond on an endpoint. ```rust use axum::{response::Html, routing::get, Router}; @@ -96,7 +107,3 @@ async fn app_endpoint() -> Html { And that's it! > You might notice that you cannot hold the VirtualDom across an await point. Dioxus is currently not ThreadSafe, so it _must_ remain on the thread it started. We are working on loosening this requirement. - -## Future Steps - -Make sure to read the [Dioxus Guide](https://dioxuslabs.com/guide) if you already haven't! diff --git a/docs/guide/src/getting_started/tui.md b/docs/guide/src/getting_started/tui.md new file mode 100644 index 000000000..106dd3587 --- /dev/null +++ b/docs/guide/src/getting_started/tui.md @@ -0,0 +1,46 @@ +# Terminal UI + +You can build a text-based interface that will run in the terminal using Dioxus. + +![Hello World screenshot](https://github.com/DioxusLabs/rink/raw/master/examples/example.png) + +> Note: this book was written with HTML-based platforms in mind. You might be able to follow along with TUI, but you'll have to adapt a bit. + +## Support + +TUI support is currently quite experimental. Even the project name will change. But, if you're willing to venture into the realm of the unknown, this guide will get you started. + +## Getting Set up + + +Start by making a new package and adding our TUI feature. + +```shell +cargo new --bin demo +cd demo +cargo add dioxus --features tui +``` + +Then, edit your `main.rs` with the basic template. + +```rust +{{#include ../../examples/hello_world_tui.rs}} +``` + +To run our app: + +```shell +cargo run +``` + +Press "ctrl-c" to close the app. To switch from "ctrl-c" to just "q" to quit you can launch the app with a configuration to disable the default quit and use the root TuiContext to quit on your own. + +```rust +{{#include ../../examples/hello_world_tui_no_ctrl_c.rs}} +``` + +## Notes + +- Our TUI package uses flexbox for layout +- 1px is one character lineheight. Your regular CSS px does not translate. +- If your app panics, your terminal is wrecked. This will be fixed eventually. diff --git a/docs/guide/src/getting_started/web.md b/docs/guide/src/getting_started/web.md new file mode 100644 index 000000000..886322a9c --- /dev/null +++ b/docs/guide/src/getting_started/web.md @@ -0,0 +1,72 @@ +# Web + +Build single-page applications that run in the browser with Dioxus. To run on the Web, your app must be compiled to WebAssembly and depend on the `dioxus` crate with the `web` feature enabled. + +A build of Dioxus for the web will be roughly equivalent to the size of a React build (70kb vs 65kb), but will load significantly faster due to [WebAssembly's StreamingCompile](https://hacks.mozilla.org/2018/01/making-webassembly-even-faster-firefoxs-new-streaming-and-tiering-compiler/) option. + +Examples: +- [TodoMVC](https://github.com/DioxusLabs/example-projects/tree/master/todomvc) +- [ECommerce](https://github.com/DioxusLabs/example-projects/tree/master/ecommerce-site) + +[![TodoMVC example](https://github.com/DioxusLabs/example-projects/raw/master/todomvc/example.png)](https://github.com/DioxusLabs/example-projects/blob/master/todomvc) + +> Note: Because of the limitations of Wasm, not every crate will work with your web apps, so you'll need to make sure that your crates work without native system calls (timers, IO, etc). + +## Support + +The Web is the best-supported target platform for Dioxus. + +## Tooling + +To develop your Dioxus app for the web, you'll need a tool to build and serve your assets. We recommend using [trunk](https://trunkrs.dev) which includes a build system, Wasm optimization, a dev server, and support for SASS/CSS: + +```shell +cargo install trunk +``` + +Make sure the `wasm32-unknown-unknown` target is installed: +```shell +rustup target add wasm32-unknown-unknown +``` + +## Creating a Project + +Create a new crate: + +```shell +cargo new --bin demo +cd demo +``` + +Add Dioxus as a dependency with the `web` feature: + +```bash +cargo add dioxus --features web +``` + +Add an `index.html` for Trunk to use. Make sure your "mount point" element has an ID of "main": + +```html + + + + + + + +
+ + +``` + +Edit your `main.rs`: +```rust +{{#include ../../examples/hello_world_web.rs}} +``` + + +And to serve our app: + +```bash +trunk serve +``` diff --git a/docs/guide/src/hello_world.md b/docs/guide/src/hello_world.md deleted file mode 100644 index d01122959..000000000 --- a/docs/guide/src/hello_world.md +++ /dev/null @@ -1,152 +0,0 @@ -# "Hello, World" desktop app - -Let's put together a simple "hello world" desktop application to get acquainted with Dioxus. - -In this chapter, we'll cover: - -- Starting a new Dioxus project with Cargo -- Adding Dioxus as a dependency -- Launching our first component as the app root - -### A new project with Cargo - -First, let's start a new project. Rust has the concept of executables and libraries. Executables have a `main.rs` and libraries have `lib.rs`. A project may have both. Our `hello world` will be an executable - we expect our app to launch when we run it! Cargo provides this for us: - -```shell -$ cargo new --bin hello-dioxus -``` - -Now, we can `cd` into our project and poke around: - -```shell -$ cd hello-dioxus -$ tree -. -├── Cargo.toml -├── .git -├── .gitignore -└── src - └── main.rs -``` - -We are greeted with a pre-initialized git repository, our code folder (`src`) and our project file (`Cargo.toml`). - -Our `src` folder holds our code. Our `main.rs` file holds our `fn main` which will be executed when our app is run. - -```shell -$ more src/main.rs -``` - -```rust -fn main() { - println!("Hello, world!"); -} -``` - -Right now, whenever our app is launched, "Hello world" will be echoed to the terminal. - -```shell -$ cargo run - Compiling hello-dioxus v0.1.0 - Finished dev [unoptimized + debuginfo] target(s) in 0.41s - Running `target/debug/hello-dioxus` -Hello, world! -``` - -Our `Cargo.toml` file holds our dependencies and project flags. - -```shell -$ cat Cargo.toml -``` - -```toml -[package] -name = "hello-dioxus" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] - -``` - -### Adding Dioxus as a dependency - -To use the Dioxus library, we'll want to add the most recent version of `Dioxus` to our crate. If you have `cargo edit` installed, simply call: - -```shell -$ cargo add dioxus --features desktop -``` - -It's very important to add `dioxus` with the `desktop` feature for this example. The `dioxus` crate is a batteries-include crate that combines a bunch of utility crates together, ensuring compatibility of the most important parts of the ecosystem. Under the hood, the `dioxus` crate configures various renderers, hooks, debug tooling, and more. The `desktop` feature ensures the we only depend on the smallest set of required crates to compile and render. - -If you system does not provide the `libappindicator3` library, like Debian/bullseye, you can enable the replacement `ayatana` with an additional flag: - -```shell -$ # On Debian/bullseye use: -$ cargo add dioxus --features desktop --features ayatana -``` - -If you plan to develop extensions for the `Dioxus` ecosystem, please use the `dioxus` crate with the `core` feature to limit the amount of dependencies your project brings in. - -### Our first app - -Now, let's edit our `main.rs` file: - -```rust -use dioxus::prelude::*; - - -fn main() { - dioxus::desktop::launch(app); -} - -fn app(cx: Scope) -> Element { - cx.render(rsx! ( - div { "Hello, world!" } - )) -} -``` - -At this point, you could call `cargo run` and be greeted with a simple `Hello, World!` screen: - -![hello world](images/helloworld.png) - -### Dissecting our example - -The `use` statement at the top of our app imports everything from the `prelude` module. `use`-ing the prelude imports the right traits, types, and macros needed for working with Dioxus. - -```rust -use dioxus::prelude::*; -``` - -This initialization code launches a Tokio runtime on a helper thread where your code will run. Then, the WebView renderer will be launched on the main thread. Due to platform requirements, the main thread is blocked by your app's event loop. - -```rust -fn main() { - dioxus::desktop::launch(app); -} -``` - -Finally, our app. Every component in Dioxus is a function that takes in `Context` and `Props` and returns an `Element`. - -```rust -fn app(cx: Scope) -> Element { - cx.render(rsx! { - div { "Hello, world!" } - }) -} -``` - -### What is this `Scope` object? - -Coming from React, the `Scope` object might be confusing. In React, you'll want to store data between renders with hooks. However, hooks rely on global variables which make them difficult to integrate in multi-tenant systems like server-rendering. - -In Dioxus, you are given an explicit `Scope` object to control how the component renders and stores data. The `Scope` object provides a handful of useful APIs for features like suspense, rendering, and more. - -For now, just know that `Scope` lets you store state with hooks and render elements with `cx.render`. - -## Moving on - -Congrats! You've built your first desktop application with Dioxus. Next, we're going to learn about the basics of building interactive user interfaces. diff --git a/docs/guide/src/images/01-setup-helloworld.png b/docs/guide/src/images/01-setup-helloworld.png deleted file mode 100644 index 9da58b932170676d33d713f6eca4ac9572992922..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31031 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 E0q|V;xc~qF diff --git a/docs/guide/src/images/helloworld.png b/docs/guide/src/images/helloworld.png deleted file mode 100644 index c10ebdf46ee879f8f50994ce3918c1038ec40cba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31650 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 C`XB@V diff --git a/docs/guide/src/images/reddit.png b/docs/guide/src/images/reddit.png deleted file mode 100644 index 2277db264584fc54029578817d0d1cd8eddb0ce3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166746 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

C#V%Ncemtgqm;qXCGJWzZofLB^^X0#1GWR*uT!f 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 diff --git a/docs/guide/src/images/reddit_post.png b/docs/guide/src/images/reddit_post.png deleted file mode 100644 index 6eccf39b23e5cda9d56376bf8cf6ef0cd188178e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26297 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 z 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 Q{RtjdRn$_ble3QcKSib-`Tzg` diff --git a/docs/guide/src/index.md b/docs/guide/src/index.md new file mode 100644 index 000000000..761f1e7d8 --- /dev/null +++ b/docs/guide/src/index.md @@ -0,0 +1,51 @@ +# Introduction + +![dioxuslogo](./images/dioxuslogo_full.png) + +Dioxus is a portable, performant, and ergonomic framework for building cross-platform user interfaces in Rust. This guide will help you get started with writing Dioxus apps for the Web, Desktop, Mobile, and more. + +```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!" } + )) +} +``` + +Dioxus is heavily inspired by React. If you know React, getting started with Dioxus will be a breeze. + +> This guide assumes you already know some [Rust](https://www.rust-lang.org/)! If not, we recommend reading [*the book*](https://doc.rust-lang.org/book/ch01-00-getting-started.html) to learn Rust first. + +## Features + +- Desktop apps running natively (no Electron!) in less than 10 lines of code. +- Incredibly ergonomic and powerful state management. +- Comprehensive inline documentation – hover and guides for all HTML elements, listeners, and events. +- Extremely memory efficient – 0 global allocations for steady-state components. +- Multi-channel asynchronous scheduler for first-class async support. +- And more! Read the [full release post](https://dioxuslabs.com/blog/introducing-dioxus/. + +### Multiplatform + +Dioxus is a *portable* toolkit, meaning the Core implementation can run anywhere with no platform-dependent linking. Unlike many other Rust frontend toolkits, Dioxus is not intrinsically linked to WebSys. In fact, every element and event listener can be swapped out at compile time. By default, Dioxus ships with the `html` feature enabled, but this can be disabled depending on your target renderer. + +Right now, we have several 1st-party renderers: +- WebSys (for WASM): Great support +- Tao/Tokio (for Desktop apps): Good support +- Tao/Tokio (for Mobile apps): Poor support +- SSR (for generating static markup) +- TUI/Rink (for terminal-based apps): Experimental + +## Stability + +Dioxus has not reached a stable release yet. + +Web: Since the web is a fairly mature platform, we expect there to be very little API churn for web-based features. + +Desktop: APIs will likely be in flux as we figure out better patterns than our ElectronJS counterpart. + +SSR: We don't expect the SSR API to change drastically in the future. \ No newline at end of file diff --git a/docs/guide/src/interactivity/custom_hooks.md b/docs/guide/src/interactivity/custom_hooks.md new file mode 100644 index 000000000..4b1e0a29f --- /dev/null +++ b/docs/guide/src/interactivity/custom_hooks.md @@ -0,0 +1,26 @@ +# Custom Hooks + +Hooks are a great way to encapsulate business logic. If none of the existing hooks work for your problem, you can write your own. + +## Composing Hooks + +To avoid repetition, you can encapsulate business logic based on existing hooks to create a new hook. + +For example, if many components need to access an `AppSettings` struct, you can create a "shortcut" hook: + +```rust +{{#include ../../examples/hooks_composed.rs:wrap_context}} +``` + +## Custom Hook Logic + +You can use [`cx.use_hook`](https://docs.rs/dioxus/latest/dioxus/prelude/struct.Scope.html#method.use_hook) to build your own hooks. In fact, this is what all the standard hooks are built on! + +`use_hook` accepts a single closure for initializing the hook. It will be only run the first time the component is rendered. The return value of that closure will be used as the value of the hook – Dioxus will take it, and store it for as long as the component is alive. On every render (not just the first one!), you will get a reference to this value. + +> Note: You can implement [`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop.html) for your hook value – it will be dropped then the component is unmounted (no longer in the UI) + +Inside the initialization closure, you will typically make calls to other `cx` methods. For example: + +- The `use_state` hook tracks state in the hook value, and uses [`cx.schedule_update`](https://docs.rs/dioxus/latest/dioxus/prelude/struct.Scope.html#method.schedule_update) to make Dioxus re-render the component whenever it changes. +- The `use_context` hook calls [`cx.consume_context`](https://docs.rs/dioxus/latest/dioxus/prelude/struct.Scope.html#method.consume_context) (which would be expensive to call on every render) to get some context from the scope \ No newline at end of file diff --git a/docs/guide/src/interactivity/dynamic_rendering.md b/docs/guide/src/interactivity/dynamic_rendering.md new file mode 100644 index 000000000..07e6a27ed --- /dev/null +++ b/docs/guide/src/interactivity/dynamic_rendering.md @@ -0,0 +1,73 @@ +# Dynamic Rendering + +Sometimes you want to render different things depending on the state/props. With Dioxus, just describe what you want to see using Rust control flow – the framework will take care of making the necessary changes on the fly if the state or props change! + +## Conditional Rendering + +To render different elements based on a condition, you could use an `if-else` statement: + +```rust +{{#include ../../examples/conditional_rendering.rs:if_else}} +``` + +> You could also use `match` statements, or any Rust function to conditionally render different things. + + +### Inspecting `Element` props + +Since `Element` is a `Option`, components accepting `Element` as a prop can actually inspect its contents, and render different things based on that. Example: + +```rust +{{#include ../../examples/component_children_inspect.rs:Clickable}} +``` + +You can't mutate the `Element`, but if you need a modified version of it, you can construct a new one based on its attributes/children/etc. + + +## Rendering Nothing + +To render nothing, you can return `None` from a component. This is useful if you want to conditionally hide something: + +```rust +{{#include ../../examples/conditional_rendering.rs:conditional_none}} +``` + +This works because the `Element` type is just an alias for `Option` + +> Again, you may use a different method to conditionally return `None`. For example the boolean's [`then()`](https://doc.rust-lang.org/std/primitive.bool.html#method.then) function could be used. + +## Rendering Lists + +Often, you'll want to render a collection of components. For example, you might want to render a list of all comments on a post. + +For this, Dioxus accepts iterators that produce `Element`s. So we need to: + +- Get an iterator over all of our items (e.g., if you have a `Vec` of comments, iterate over it with `iter()`) +- `.map` the iterator to convert each item into a rendered `Element` using `cx.render(rsx!(...))` + - Add a unique `key` attribute to each iterator item +- Include this iterator in the final RSX + +Example: suppose you have a list of comments you want to render. Then, you can render them like this: + +```rust +{{#include ../../examples/rendering_lists.rs:render_list}} +``` + +### The `key` Attribute + +Every time you re-render your list, Dioxus needs to keep track of which item went where, because the order of items in a list might change – items might be added, removed or swapped. Despite that, Dioxus needs to: + +- Keep track of component state +- Efficiently figure out what updates need to be made to the UI + +For example, suppose the `CommentComponent` had some state – e.g. a field where the user typed in a reply. If the order of comments suddenly changes, Dioxus needs to correctly associate that state with the same comment – otherwise, the user will end up replying to a different comment! + +To help Dioxus keep track of list items, we need to associate each item with a unique key. In the example above, we dynamically generated the unique key. In real applications, it's more likely that the key will come from e.g. a database ID. It doesn't really matter where you get the key from, as long as it meets the requirements + +- Keys must be unique in a list +- The same item should always get associated with the same key +- Keys should be relatively small (i.e. converting the entire Comment structure to a String would be a pretty bad key) so they can be compared efficiently + +You might be tempted to use an item's index in the list as its key. In fact, that’s what Dioxus will use if you don’t specify a key at all. This is only acceptable if you can guarantee that the list is constant – i.e., no re-ordering, additions or deletions. + +> Note that if you pass the key to a component you've made, it won't receive the key as a prop. It’s only used as a hint by Dioxus itself. If your component needs an ID, you have to pass it as a separate prop. diff --git a/docs/guide/src/interactivity/event_handlers.md b/docs/guide/src/interactivity/event_handlers.md index 89139adb4..8d4ce5515 100644 --- a/docs/guide/src/interactivity/event_handlers.md +++ b/docs/guide/src/interactivity/event_handlers.md @@ -1,118 +1,66 @@ -# Event handlers +# Event Handlers -To make our boring UIs less static and more interesting, we want to add the ability to interact with user input. To do this, we need to add some event handlers. +Events are interesting things that happen, usually related to something the user has done. For example, some events happen when the user clicks, scrolls, moves the mouse, or types a character. To respond to these actions and make the UI interactive, we need to handle those events. +Events are associated with elements. For example, we usually don't care about all the clicks that happen within an app, only those on a particular button. To handle events that happen on an element, we must attach the desired event handler to it. -## The most basic events: clicks +Event handlers are similar to regular attributes, but their name usually starts with `on`- and they accept closures as values. The closure will be called whenever the event is triggered, and will be passed that event. -If you've poked around in the Dioxus examples at all, you've definitely noticed the support for buttons and clicks. To add some basic action when a button is clicked, we need to define a button and then attach an "onclick" handler to it. +For example, to handle clicks on an element, we can specify an `onclick` handler: ```rust -fn app(cx: Scope) -> Element { - cx.render(rsx!{ - button { - onclick: move |evt| println!("I've been clicked!"), - "click me!" - } - }) -} +{{#include ../../examples/event_click.rs:rsx}} ``` -If you're using the builder pattern, it's pretty simple too. `onclick` is a method for any builder with HTML elements. - -```rust -fn app(cx: Scope) -> Element { - button(&cx) - .onclick(move |evt| println!("I've been clicked!")) - .text("click me!") - .build() -} -``` - -The event handler is different in Dioxus than other libraries. Event handlers in Dioxus may borrow any data that has a lifetime that matches the component's scope. This means we can save a value with `use_hook` and then use it in our handler. - -```rust -fn app(cx: Scope) -> Element { - let val = cx.use_hook(|_| 10); - - button(&cx) - .onclick(move |evt| println!("Current number {val}")) - .text("click me!") - .build() -} -``` - - ## The `Event` object -When the listener is fired, Dioxus will pass in any related data through the `event` parameter. This holds helpful state relevant to the event. For instance, on forms, Dioxus will fill in the "values" field. +Event handlers receive an [`UiEvent`](https://docs.rs/dioxus-core/latest/dioxus_core/struct.UiEvent.html) object containing information about the event. Different types of events contain different types of data. For example, mouse-related events contain [`MouseData`](https://docs.rs/dioxus/latest/dioxus/events/struct.MouseData.html), which tells you things like where the mouse was clicked and what mouse buttons were used. -```rust -// the FormEvent is roughly -struct FormEvent { - value: String, - values: HashMap -} +In the example above, this event data was logged to the terminal: -fn app(cx: Scope) -> Element { - cx.render(rsx!{ - form { - onsubmit: move |evt| { - println!("Values of form are {evt.values:#?}"); - } - input { id: "password", name: "password" } - input { id: "username", name: "username" } - } - }) -} +``` +Clicked! Event: UiEvent { data: MouseData { coordinates: Coordinates { screen: (468.0, 109.0), client: (73.0, 25.0), element: (63.0, 15.0), page: (73.0, 25.0) }, modifiers: (empty), held_buttons: EnumSet(), trigger_button: Some(Primary) } } +Clicked! Event: UiEvent { data: MouseData { coordinates: Coordinates { screen: (468.0, 109.0), client: (73.0, 25.0), element: (63.0, 15.0), page: (73.0, 25.0) }, modifiers: (empty), held_buttons: EnumSet(), trigger_button: Some(Primary) } } ``` -## Stopping propagation +To learn what the different event types provide, read the [events module docs](https://docs.rs/dioxus/latest/dioxus/events/index.html). -With a complex enough UI, you might realize that listeners can actually be nested. +### Stopping propagation + +When you have e.g. a `button` inside a `div`, any click on the `button` is also a click on the `div`. For this reason, Dioxus propagates the click event: first, it is triggered on the target element, then on parent elements. If you want to prevent this behavior, you can call `cancel_bubble()` on the event: ```rust -div { - onclick: move |evt| {}, - "outer", - div { - onclick: move |evt| {}, - "inner" - } -} -``` - -In this particular layout, a click on the inner div is transitively also a click on the outer div. If we didn't want the outer div to be triggered every time we trigger the inner div, then we'd want to call `cancel_bubble()`. - -This will prevent any listeners above the current listener from being triggered. - -```rust -div { - onclick: move |evt| {}, - "outer", - div { - onclick: move |evt| { - // now, outer won't be triggered - evt.cancel_bubble(); - }, - "inner" - } -} +{{#include ../../examples/event_click.rs:rsx}} ``` ## Prevent Default -With HTML-based renderers, the browser will automatically perform some action. For text inputs, this would be entering the provided key. For forms, this might involve navigating the page. +Some events have a default behavior. For keyboard events, this might be entering the typed character. For mouse events, this might be selecting some text. -In some instances, you don't want this default behavior. In these cases, instead of handling the event directly, you'd want to prevent any default handlers. - -Normally, in React or JavaScript, you'd call "preventDefault" on the event in the callback. Dioxus does *not* currently support this behavior. Instead, you need to add an attribute to the element generating the event. +In some instances, might want to avoid this default behavior. For this, you can add the `prevent_default` attribute with the name of the handler whose default behavior you want to stop. This attribute is special: you can attach it multiple times for multiple attributes: ```rust -form { - prevent_default: "onclick", - onclick: move |_|{ - // handle the event without navigating the page. - } -} +{{#include ../../examples/event_prevent_default.rs:prevent_default}} ``` + +Any event handlers will still be called. + +> Normally, in React or JavaScript, you'd call "preventDefault" on the event in the callback. Dioxus does *not* currently support this behavior. Note: this means you cannot conditionally prevent default behavior. + +## Handler Props + +Sometimes, you might want to make a component that accepts an event handler. A simple example would be a `FancyButton` component, which accepts an `on_click` handler: + +```rust +{{#include ../../examples/event_handler_prop.rs:component_with_handler}} +``` + +Then, you can use it like any other handler: + +```rust +{{#include ../../examples/event_handler_prop.rs:usage}} +``` + +> Note: just like any other attribute, you can name the handlers anything you want! Though they must start with `on`, for the prop to be automatically turned into an `EventHandler` at the call site. +> +> You can also put custom data in the event, rather than e.g. `MouseData` diff --git a/docs/guide/src/interactivity/hooks.md b/docs/guide/src/interactivity/hooks.md index 4f298a143..c437bdeea 100644 --- a/docs/guide/src/interactivity/hooks.md +++ b/docs/guide/src/interactivity/hooks.md @@ -1,253 +1,83 @@ -# Hooks and Internal State +# Hooks and Component State -In the [Adding Interactivity](./interactivity.md) section, we briefly covered the concept of hooks and state stored internal to components. +So far our components, being Rust functions, had no state – they were always rendering the same thing. However, in a UI component, it is often useful to have stateful functionality to build user interactions. For example, you might want to track whether the user has openend a drop-down, and render different things accordingly. -In this section, we'll dive a bit deeper into hooks, exploring both the theory and mechanics. +For stateful logic, you can use hooks. Hooks are Rust functions that take a reference to `ScopeState` (in a component, you can pass `&cx`), and provide you with functionality and state. +## `use_state` Hook +[`use_state`](https://docs.rs/dioxus/latest/dioxus/hooks/fn.use_state.html) is one of the simplest hooks. -## Theory of Hooks +- You provide a closure that determines the initial value +- `use_state` gives you the current value, and a way to update it by setting it to something else +- When the value updates, `use_state` makes the component re-render, and provides you with the new value -Over the past several decades, computer scientists and engineers have long sought the "right way" of designing user interfaces. With each new programming language, novel features are unlocked that change the paradigm in which user interfaces are coded. - -Generally, a number of patterns have emerged, each with their own strengths and tradeoffs. - -Broadly, there are two types of GUI structures: - -- Immediate GUIs: re-render the entire screen on every update -- Retained GUIs: only re-render the portion of the screen that changed - -Typically, immediate-mode GUIs are simpler to write but can slow down as more features, like styling, are added. - -Many GUIs today are written in *Retained mode* - your code changes the data of the user interface but the renderer is responsible for actually drawing to the screen. In these cases, our GUI's state sticks around as the UI is rendered. To help accommodate retained mode GUIs, like the web browser, Dioxus provides a mechanism to keep state around. - -> Note: Even though hooks are accessible, you should still prefer one-way data flow and encapsulation. Your UI code should be as predictable as possible. Dioxus is plenty fast, even for the largest apps. - -## Mechanics of Hooks -In order to have state stick around between renders, Dioxus provides the `hook` through the `use_hook` API. This gives us a mutable reference to data returned from the initialization function. +For example, you might have seen the counter example, in which state (a number) is tracked using the `use_state` hook: ```rust -fn example(cx: Scope) -> Element { - let name: &mut String = cx.use_hook(|| "John Doe".to_string()); - - // -} +{{#include ../../examples/hooks_counter.rs:component}} ``` +![Screenshot: counter app](./images/counter.png) -We can even modify this value directly from an event handler: +Every time the component's state changes, it re-renders, and the component function is called, so you can describe what you want the new UI to look like. You don't have to worry about "changing" anything – just describe what you want in terms of the state, and Dioxus will take care of the rest! + +> `use_state` returns your value wrapped in a smart pointer of type [`UseState`](https://docs.rs/dioxus/latest/dioxus/hooks/struct.UseState.html). This is why you can both read the value and update it, even within a handler. + +You can use multiple hooks in the same component if you want: ```rust -fn example(cx: Scope) -> Element { - let name: &mut String = cx.use_hook(|| "John Doe".to_string()); - - cx.render(rsx!( - button { - onclick: move |_| name.push_str(".."), - } - )) -} +{{#include ../../examples/hooks_counter_two_state.rs:component}} ``` +![Screenshot: app with two counters](./images/counter_two_state.png) -Mechanically, each call to `use_hook` provides us with `&mut T` for a new value. +## Rules of Hooks + +The above example might seem a bit magic, since Rust functions are typically not associated with state. Dioxus allows hooks to maintain state across renders through a reference to `ScopeState`, which is why you must pass `&cx` to them. + +But how can Dioxus differentiate between multiple hooks in the same component? As you saw in the second example, both `use_state` functions were called with the same parameters, so how come they can return different things when the counters are different? ```rust -fn example(cx: Scope) -> Element { - let name: &mut String = cx.use_hook(|| "John Doe".to_string()); - let age: &mut u32 = cx.use_hook(|| 10); - let friends: &mut Vec = cx.use_hook(|| vec!["Jane Doe".to_string()]); - - // -} +{{#include ../../examples/hooks_counter_two_state.rs:use_state_calls}} ``` -Internally, Dioxus is creating a list of hook values with each call to `use_hook` advancing the index of the list to return the next value. +This is only possible because the two hooks are always called in the same order, so Dioxus knows which is which. So the order you call hooks matters, which is why you must follow certain rules when using hooks: -Our internal HookList would look something like: +1. Hooks may be only used in components or other hooks (we'll get to that later) +2. On every call to the component function + 1. The same hooks must be called + 2. In the same order +3. Hooks name's must start with `use_` so you don't accidentally confuse them with regular functions + +These rules mean that there are certain things you can't do with hooks: + +### No Hooks in Conditionals +```rust +{{#include ../../examples/hooks_bad.rs:conditional}} +``` + +### No Hooks in Closures +```rust +{{#include ../../examples/hooks_bad.rs:closure}} +``` + +### No Hooks in Loops +```rust +{{#include ../../examples/hooks_bad.rs:loop}} +``` + +## `use_ref` Hook + +`use_state` is great for tracking simple values. However, you may notice in the [`UseState` API](https://docs.rs/dioxus/latest/dioxus/hooks/struct.UseState.html) that the only way to modify its value is to replace it with something else (e.g., by calling `set`, or through one of the `+=`, `-=` operators). This works well when it is cheap to construct a value (such as any primitive). But what if you want to maintain more complex data in the components state? + +For example, suppose we want to maintain a `Vec` of values. If we stored it with `use_state`, the only way to add a new value to the list would be to create a new `Vec` with the additional value, and put it in the state. This is expensive! We want to modify the existing `Vec` instead. + +Thankfully, there is another hook for that, `use_ref`! It is similar to `use_state`, but it lets you get a mutable reference to the contained data. + +Here's a simple example that keeps a list of events in a `use_ref`. We can acquire write access to the state with `.write()`, and then just `.push` a new value to the state: ```rust -[ - Hook, - Hook, - Hook, -] +{{#include ../../examples/hooks_use_ref.rs:component}} ``` -This is why hooks called out of order will fail - if we try to downcast a `Hook` to `Hook`, Dioxus has no choice but to panic. We do provide a `try_use_hook` but you should never need that in practice. +> The return values of `use_state` and `use_ref`, (`UseState` and `UseRef`, respectively) are in some ways similar to [`Cell`](https://doc.rust-lang.org/std/cell/) and [`RefCell`](https://doc.rust-lang.org/std/cell/struct.RefCell.html) – they provide interior mutability. However, these Dioxus wrappers also ensure that the component gets re-rendered whenever you change the state. -This pattern might seem strange at first, but it can be a significant upgrade over structs as blobs of state, which tend to be difficult to use in [Rust given the ownership system](https://rust-lang.github.io/rfcs/2229-capture-disjoint-fields.html). - - -## Rules of hooks - -Hooks are sensitive to how they are used. To use hooks, you must abide by the -"rules of hooks" ([borrowed from react](https://reactjs.org/docs/hooks-rules.html)): - -- Functions with "use_" should not be called in callbacks -- Functions with "use_" should not be called out of order -- Functions with "use_" should not be called in loops or conditionals - -Examples of "no-nos" include: - -### ❌ Nested uses - -```rust -// ❌ don't call use_hook or any `use_` function *inside* use_hook! -cx.use_hook(|_| { - let name = cx.use_hook(|_| "ads"); -}) - -// ✅ instead, move the first hook above -let name = cx.use_hook(|_| "ads"); -cx.use_hook(|_| { - // do something with name here -}) -``` - -### ❌ Uses in conditionals -```rust -// ❌ don't call use_ in conditionals! -if do_thing { - let name = use_state(&cx, || 0); -} - -// ✅ instead, *always* call use_state but leave your logic -let name = use_state(&cx, || 0); -if do_thing { - // do thing with name here -} -``` - -### ❌ Uses in loops - - -```rust -// ❌ Do not use hooks in loops! -let mut nodes = vec![]; - -for name in names { - let age = use_state(&cx, |_| 0); - nodes.push(cx.render(rsx!{ - div { "{age}" } - })) -} - -// ✅ Instead, consider refactoring your usecase into components -#[inline_props] -fn Child(cx: Scope, name: String) -> Element { - let age = use_state(&cx, |_| 0); - cx.render(rsx!{ div { "{age}" } }) -} - -// ✅ Or, use a hashmap with use_ref -let ages = use_ref(&cx, || HashMap::new()); - -names.iter().map(|name| { - let age = ages.get(name).unwrap(); - cx.render(rsx!{ div { "{age}" } }) -}) -``` - -## Building new Hooks - -However, most hooks you'll interact with *don't* return an `&mut T` since this is not very useful in a real-world situation. - -Consider when we try to pass our `&mut String` into two different handlers: - -```rust -fn example(cx: Scope) -> Element { - let name: &mut String = cx.use_hook(|| "John Doe".to_string()); - - cx.render(rsx!( - button { onclick: move |_| name.push_str("yes"), } - button { onclick: move |_| name.push_str("no"), } - )) -} -``` - -Rust will not allow this to compile! We cannot `Copy` unique mutable references - they are, by definition, unique. However, we *can* reborrow our `&mut T` as an `&T` which are non-unique references and share those between handlers: - -```rust -fn example(cx: Scope) -> Element { - let name: &String = &*cx.use_hook(|| "John Doe".to_string()); - - cx.render(rsx!( - button { onclick: move |_| log::info!("{}", name), } - button { onclick: move |_| log::info!("{}", name), } - )) -} -``` - -So, for any custom hook we want to design, we need to enable mutation through [interior mutability](https://doc.rust-lang.org/book/ch15-05-interior-mutability.html) - IE move to runtime [borrow checking](https://doc.rust-lang.org/1.8.0/book/references-and-borrowing.html). We might incur a tiny runtime cost for each time we grab a new value from the hook, but this cost is extremely minimal. - -This example uses the `Cell` type to let us replace the value through interior mutability. `Cell` has practically zero overhead, but is slightly more limited that its `RefCell` cousin. - -```rust -fn example(cx: Scope) -> Element { - let name: &Cell<&'static str> = cx.use_hook(|| Cell::new("John Doe")); - - cx.render(rsx!( - button { onclick: move |_| name.set("John"), } - button { onclick: move |_| name.set("Jane"), } - )) -} -``` - -## Driving state updates through hooks - -Hooks like `use_state` and `use_ref` wrap this runtime borrow checking in a type that *does* implement `Copy`. Additionally, they also mark the component as "dirty" whenever a new value has been set. This way, whenever `use_state` has a new value `set`, the component knows to update. - -```rust -fn example(cx: Scope) -> Element { - let name = use_state(&cx, || "Jack"); - - cx.render(rsx!( - "Hello, {name}" - button { onclick: move |_| name.set("John"), } - button { onclick: move |_| name.set("Jane"), } - )) -} -``` - -Internally, our `set` function looks something like this: - -```rust -impl<'a, T> UseState<'a, T> { - fn set(&self, new: T) { - // Replace the value in the cell - self.value.set(new); - - // Mark our component as dirty - self.cx.needs_update(); - } -} -``` - -Most hooks we provide implement `Deref` on their values since they are essentially smart pointers. To access the underlying value, you'll often need to use the deref operator: - -```rust -fn example(cx: Scope) -> Element { - let name = use_state(&cx, || "Jack"); - - match *name { - "Jack" => {} - "Jill" => {} - _ => {} - } - - // .. -} - -``` - - -## Hooks provided by the `Dioxus-Hooks` package - -By default, we bundle a handful of hooks in the Dioxus-Hooks package. Feel free to click on each hook to view its definition and associated documentation. - -- [use_state](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_state.html) - store state with ergonomic updates -- [use_ref](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_ref.html) - store non-clone state with a refcell -- [use_future](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_future.html) - store a future to be polled after initialization -- [use_coroutine](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_coroutine.html) - store a future that can be stopped/started/communicated with -- [use_context_provider](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_context_provider.html) - expose state to descendent components -- [use_context](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_context.html) - consume state provided by `use_provide_context` -- [use_suspense](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_suspense.html) diff --git a/docs/guide/src/interactivity/images/counter.png b/docs/guide/src/interactivity/images/counter.png new file mode 100644 index 0000000000000000000000000000000000000000..dd89cadef3ab7794d1f77b08350b8a2cad434b72 GIT binary patch literal 11368 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 O00kLk=_*O1;Qs=kxyf1p literal 0 HcmV?d00001 diff --git a/docs/guide/src/interactivity/images/counter_two_state.png b/docs/guide/src/interactivity/images/counter_two_state.png new file mode 100644 index 0000000000000000000000000000000000000000..4f77942a20ab23ea01784871c7bc977a2baec4a5 GIT binary patch literal 14503 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

Xr+Mb0o6&U|y=x|mJQEkCNwLvd|7x7mswPA5 zf=7=(Jp+M+8vg~|<~4537g8A&2QoCZ8Mw9>M!Tm$8AdY@N}7~3AqEk<+RJZnmSf$n zFL-RNwycYx#x}a@Fu>e9w^Jrbk<>er7g#OhP>}Um_qBgdYFV6P!X`pbYUv6#s+%#`~9NL@g^xR+BALL0Y72g1^9( zew<15I~K+bcH%$p_CMwozbgcqwI2M$S9nr1$*`rrS#h#GNRU+Ec5+T*%(Z7xZs_8! zn*OHN&qSl8%_&}{t7&S;DWkw>L7tIGthFEQZ(WX3L4@6u&TrZcoi)%6FOjqjB~ zO<4b)-ZnsEvprXqIEOI{@W`qfLbY}`-8AG11SM2>fBEI}+5B?3U>F!;BbI(DhElUv zOxV#mj>x$X#&GC3h0de1O4Un>a%Cd0fHLgd<`@6vjoVRg)z1)=YSF%(tc20=`i|HT z3h#3ge-1HxM$UE)T5Z4SznwVx1zm0mp}>ZyJsxpo6A_b(dnUX78HA;}7YwD7`}9f)m-u8!rM57Hr7DZGh#cs4a6OE!jwh}bB}}>Aoi(J^ zQyW-3*V=bHJ#8H=7uj)IEZ-Q{h~?%!YYG}Wq#*#h+sMoXNm2&i`to0lWCALAzynIYC-=2uIi zJ-Hwbm)eExsEY*vGZbjBX7)PMR(%S{2qdRMFs}z!b?Gdu#ib+idT>t`>BJ}8mFXm( zy%TiRY?$Di;D#2i^l>J<+7Eb(6=pzkgvy z3bf)yF+{1cPBEjAVHcy{7{ck54=Jvoi~nPhcS1h2IfL;7#f!I(OT49Mc&l{%twhvM zc~ZDXS-TQX!j8?@rfXPUagx-7#|uh&mM5oMQ}9cPSgW+YW5*5B4asDPV{%3gM=~sGWmYRI?!iTpD?q)DfIsq9Tls z<&uP}oTB`-5TxNNHWsB?&8);GR#ZF8!HebE%W5#QjAZX2d1WmpRY5+OV{WB$^D|Z8 zX==3Y@G{_0Y5OtMUThg4Gh`PBjPNppip-jZD`aE%N|>qH+}NcGja^ZV{Vs|Vjn8lz zKu3L>ys<^`@SH$+GO@lcmKy?K_rk5$TqO zj-j}rvO=!23}INIOj?Lf4PMW8&C7aMG(a*8h^nxUY|s$#W34>|jcw6w4)l@lfHkkp zkm0o|!O+g?C--MfT3Y{s0qRQ8a>1Ab97@pIm$(q@@S9=zg?X7_>8Etmg5BB}&RD-Z zldf)T40d31sQJ(OKS#^(#lvMkyIRo`xM-L#R#I^&+aIl1uh@9r*pwp z^(7DSnfnm|saEaVw4?kXtudMKd)3vTQX5EvLgJN?z9>9y`7;Z}MU)0xnkzR`H|COQ z5;>*SZ6wEaym~28!r-vVzVJXv3N#zgV^OGU_l4BaNCE<85%0hVdhww$Yz$$d+0C8wQkoYH_AM`QexZf9#I~}vq@4PJY~eug*#uP+n`)$E>OfAHlom}q=9^2( zA^jiA^5(2oLs1N^-JJgRG<^{_B9Bc^C`Vb*Bh*aW@)lONYBq=G$iBW>m{0q#)DFPeM3+}9{xWcVbm8PHKpD6A>5&EXBcyx`Z?UtC?vn!Cd5Fi`&2=xo*^kU=VD8G6NWOIVD+ z;BG+dK+`}GN%ng(PznjEl#6xirNZ^@5GM{0Y&`f+cRm+0tbkTlhsn?- zN;p}6;fZlwp+f86iaqk}_xZ3DO2|K;3$6`U5tpWB>fh+$vu=6>v}}cgUx`=dZXzAE zW_$FmYE^3_-*6GfMaz#DPg4+OR81z63NNMpWepL_Cvtj@<3XSy0C`m{jbz0A9KxqH zKV3RWo$N(7rf3U4F)}vZ`H@ud-?*9VtBjBsL(j&>kAq^;7D;w|1W&*lw8*V^lss7M zs!&EHC*Vy|Us-fXKIC8WHIjTzUaFv_2#E7!6gF{wPj`Qsl7iK9e)AquT49qN)=zC= zeU2$(tv!~~(>i=m4W*5xkxZ8yX-ywSmLoR*5;b0&k`q!(1)E<+Lbn)6)i$XceeDxz zI%C=ph;tg#pGwtq%9#xiGl^CJDz!Hy&rl)dv*c02`dai+*DEF-0d9Uk|7;QRA&-TvpI4x=aFKHl4;4x)uYPuIN>@WM$wJ zj>&bAk`lnnkwB+KPFH(z_=Vm7PPCdE$T_FsJmh4#b$~G2M5xrc(UH{x1kE~wk7<-6 zA*85 zOCdx}LLb}crvGpmLR7=LKFO+#7);=8|DK3SQOgYhbeVzf5ETj|Fs22|>vvtsc&5r% zdqz#Jl4`j?HZyVw7JPwyTExtjwZgGE-Kzl?FkhyIg4O+ZV&VT=^wLnu(Chbcl{2L% zWH+NnLyb*}QgLJIsfz5EcYyhN`JmGcoBzwAlnb#wex%SeDN{UX&dYnL|A*{@8iJP6 zdM`S;Y5nYUh5j`eee!L=L-_p`WI^a2m(GpUI!imqBWbX92GZl_t!*#JC zv)n{wA7oEyq*S8!zP9N|tF^x`z?1%LEnq;-q-1OU^phj>IUy@pJ&IHG-GW|BD~D2! z65^MXvvSf?r=HK3xYm8B@inH_#j@zPQxmObl}efD{}WPcQs#Pbb=4@GA0K>ZvS_yf zTNL`0Yc&RKYi8YUrstjMtCYk_=dE~ctc^o8}nOCtSqOhJC24|Z%y zS3XtXFEg%*Jt+BwI2nyHX-d3Pi$A51*7{ZHsMLP=rTPGp`Jh(vRWi=&F6 z*{{@t$C`4xzda{7g$k=`%way3Hdn^0r%K@;+e4!8-#ItR8oDLu{T$cj=O6egfaK13 z_CZs6Oe)yeS(S*C&{h3*xg+ImI2?Hd)6V1V*VPSu6%Fij0svE-K1di$0$5L*D5_(Fx1<*kbz|~9@~+OR;o@uL_{Ti(mygW$0cR3TOM0j zPwLvAw*3doE6|(7d^@n7P|gg#g0xh(^l+jySqu=qZE+}-A;pP-fpJ)kIT?z)g)Dw7 z{N$9d*34v>4*@V7x5kdXrg^sqH;7FWVqK9*;uR`ek^9Oeu7aBaaAvYEwOJS=3 z6uI&Te6w)tc?ll8aIj3V-j!yiTD4fcWV2J&LKmPwBI=g0->TREa>-`M?2G1WGL~}H zCC*IM@TB1migav<$igHUy2ZFnNgHR_$a9=YL`5w#O0dpjlYQ<3>o52~Akg}_e8VUT z3MBuZK7Pt&BAJDH*u8UZ*&^Psh$$T^`lL+m)(Q%S#hl>^SD)>2lJOqkyDDA5ox&ha zq5pN4osr^3jIBG!D$$y)P1Bsd6$6HBj~BfRuF5gf5Ul z?&zM2pQPl+nUATOHISADTUa78#4&w{bnlpcaI`O~Wx16-fKK}~%Rm2PI-{TJd8k|I zMEN{B%c5Ia{dxh6VsT148LJ>5`I{n{m0y)tHTR$4=xq^NV~bl1z|YbU>#v(MUv6^Y zNLG^Y&=hUrv`8o_$V&|4D`;dSOeKJ!p-$>iVyRG5f+~C|tupI(GoECk=4m-SUR>0B zsE#?VB%Ln2xT$&Vm+J2f2^n-l>ti=f*8=c?m8>b}>Mt{MZkJDU3RTY$TntQ4<*n>8 zOga4+)*gRsT4D6)UH5j5V%CNlbs{9=20nW)bG_;JD@OClq`q9 zQYJ8>*)8J%LUOaJ|piwg6u141x!%(52#%%SAZ-k7@ygr#7mcXuz5I*he zIKHS1ynN$PT8Ap|VpkEIXLFq^vMdZ167}eHa0=C5c&Y3-lYPHx2j>WbtGicTYCuVb z;tu2c%+=bhp179|d*VV5iq^0}x2EZdr6CCk**`YM#o1=rqnwk+*!NMZPqibN| zd_Ol@?G-A$Us%u7H4RtvVeuj$RJeRtbg%lzqKAQjpmGb-cW6^g2Rr}dZ#|LM3{kzp zD0CDJofX{*#uH zZCqms0;MO^HTp@zWy-s@!34mdctp!Sa5WTPtqxaY@nS^L2wE~~EL!M_cM zRJ2@kN}E90mrbvMg$1(lQFkVuuIuiu=SrU8F3ZU+kFDwHKbsR*(qQy1fV_jip+=PH ze;!1$y*Gr(w>tc$(J`f!I)ZKSmo)ZP{)^OFIO%xGY5PjEDmdaw8&1?^InG&|g!2Rw zqwRa#fs{BzO^hXs9Ha``XbbR}(v#S98D2C{-s`0!u+bdEK<5S3NDB#qY^s_TKMCkXay53+0b|LWmk_CkBkE_yN8EB3TlQn zS_&ogYE~zv6HOGt$-fNcqZ3`@(SXwd5fuNirR{uE)NEMS?|7i7^C1&^yL(JyedpVt z%q|VCc8iH2V~ueqG$fp!=7c#A?*sRfUuFFuW-MwfW{g_(r3H&Fx>4#vBuxM_I%i!k zZ<0bRp=dY3=YU*Hs3FGfruVq&THr{sEEY)wVpS~=zL5eCC0wQF@c z83DvuRgfXZpA=3&>y9=c4jj6T1{PWy<>{hUW9O-)BKc^#tCuPcC7GFxSLUrJWAsix zdbW8?La0KPCHpEm>8+id%fv2Wc6QisiG}Pizj9V2i7_tRSW82|(XbN6g1RQwvjPFF z$w+^RLzZvJf^1hB`S+QNQ)q%9aOP#R$aFG=7h$nvvx`Y?7Hm z8D&3J^HgOPbKCQDILGC~3(ITVTbVBM?%Hew@@Cv?rK2@oBrgCALP$?LBPP2Df}a8sHry@EPG~dV9?lGcgzg-k`@`?i;g&QHzJ2(=~dTE zwCtfLyNMv);$L!e8BC`z+PkFr-x1D+@~PEJUDcN){@kdwnBYCe7gIMwg2kjbMgqCP z`j);dBPpD(ajTk_FBwhjZ42*#iwdtVax8qP{lg+GS1ot%&FY<&a{6f{ zf`2z~a;8+B-e*Pys#xp4?cOwY8{d`EQd3R9}1!G9G;i)-=XB_*|yElzfp+hMpJ`D7(9 zomNm(%wcr1<~1-gQ80Ur{m`$@7w2-@{Fs@4Y;opzeDLLT_~q3CS3d`kRyp^B?q`n) zAjuqQ;kTlvxw~N&|G>))<^3ogqkeHTAyPC&Am4d)Q~TY-Wcz0zT-(JX?rnDObGGl( zXh6;%12>rb=L-@Hv7KNNPnO zowVLJ`EBQEeb19!X}mZ@{{v}=v!IG)>h>}!ttnKa`e|=d|p!il4pSl~F zq)8QrtZOc`(l!5?+z^3R+DPhs203PEEK(spW{VuV zq0>JK{K^hfi;{0Zx{1~JL~u7zJAkWIsg$LoMf2h}BOVr2Pen-|v0!9kCLMK1TT)fo zSGGy^s0_LCZ0{HJ3#de_oz9AD4UEO&g;8ivUA$Lj3F*iNtouo|6c=LOZ?c)}5lMGF zUYreqwH4N8m2fZ3Nzga_v=hnQf^AWZ`K3t8H^@+Io5Wl}F7^s@4pa^fpNd2euQEQN$V^I;H3vIdh$_R66Z8eCig zOCJj)G)$mR<$;}AA;>L;E2HEtSq27#GGYC5Ep(cjUmq$aPsRCJHFY1+W;xek9w+z- zV1$^*+MIAhw#A4I%Q|NiulpaB z4*a|wFHML`F{}~7i27wdR~9A^;n0{Go4Y3NCg^cw3a!mQ1EB=Ln=XvRdP&Vy-!;#z z9pV<V?X#zoai-Ift0UMRI3)FVc8Stv z7}y57X>5Rq@qD11!Aj!rdR#H9d5Wvy3Y#LWKnbPdNeSZ}yR3+;Y5Zt#*bKB7y2l=+ z?5(H-o`voROypbQPqVVX;!0|n_{sJ1pvSl)zj~X_xQ@z|OWH$Tj5#VD*?i?Vm)MK5 zq9$pU;I!{w)n1c+o3E6tEa#M#s2d*)DKeEd=wkS^+!+Lgd-h5kR%{mS{iEq5-(#+F z%&IL)s`;$tX*jNq6f$66_&Hsykp#Oyy46XW?S^*0&0VhS^;i_ESbxx;WXU%ZDfm3M zN6sy~+HAofo8@Hfl!*I}H^N%yl&J^Z z!!Wl`NtzLF-KXJlx|7BB6&pCwx!i>ox`;J0B(bS8#xa|DesN2Y6>!B)sR@*;oD>oVU~+}LWe7LQ;Imxp%c1IZ^TYcg~UDUi4)f3=Iy^;GxY4lA+7snJ#a?a8pERSix?4oaQd{VvoB~_9oz^%EbKP)YTD^NTM zu$DU%?tT5`@@3b1If<2$$$6nX!*&BFo<&m{_bvo9^RbzwNUUW&Y><<-rcW8*=<@Ot^a7{jW7OH;K_zu)hT$s7qZ4D3t$i zlfbfrH;Eax;`NCXG%lEIsBY^MFCd;ZHYbb=rE-(U?3pM;Gv{70rGFd8t!S;kcFSV7 zK2+*;Tb*4Ur)!uRXympyfzF-LQ9bL$*Xz_G##J$7Pf?ntsDaAQVh>%D{sSh>nb(vz zt85HTC);c>$d^@`E0YxvD`A*J0&gEM?pRmOWjGd4fO~6Zue#MA6HROC^eWcOcPK=N~F z()^~S@Uu^T3FFa!&>$|?#|)32ceu6tzyAKOn4iJ#a5#7~j=SR`Z{MKX-fQEVIvT~Y zC?Qclof0=D?7Y?3i1*Ov^90XW6UK3`Qr3Zak-Y-Gsbe6StaoRCz_dDzET>$IxO5Uv>I8gLYIkQaY&e&_!Ly~8l+nS$#*g1MJ}eYaGGJfRgXlR< z)Q!-#O2kEM6OlqqHJ^7vM4sIE4q{>+wpeOj398Sysn)7(?nnwW)tp>OigEQ&U=)Z&X6(YL7k_;=6~f>aH8 zQ-4DAs(pSLUT`F)`t0#n&>gHjm~2ufZ6~NUr*XzE=m!bD`7w2C+lSliw*_(bTi&r= z@+&(?Kqr)$5}0DjTMFrt`@wFD^Nrc4H{`KQV3mqT2GE$Z^bBya^SiWEITUz2nu$6XMf>=${e zyc_>Ynd!0ICw;+?7YjqlW0c23g|!p0A@G7k!YEbyQL^Xd;-r*#WYacm&7#Y72wIkW zTqxTfyewvG4cr}$0$HtbbV_WMOi^C2gG>j(-(B>TOwMft)|{3RlWl|8jO@bE(_Mk; zI7d7UZs*)b$H$VSn2a+7jWg=7;%tC%a&*eEA!2e6npF1pCa&7e4kAp#U}p&q-IB~0 zvZI}Qax;JbzCU2$8DrmP%T`B_*y8}bao6p6j^C99c_bATLY#NkP{Co}7Fci~Zjr@w zbOtNgl2cLIwnT?82QzqBu*`v8Z$*i!5I|QM-OQU`I;f>>4$EcOETFuATcNQGfn>KP z^ZXkYcU3SQ;$XZk16n$rGgghF6U-2*?Vx?_k{znX{ADCH$^ViPU#?l5xYYHPpT*0h zLzt!WsKT;H!I`P<+^IJ9`Rq%-M2kvmZ8+4+3sRtsz4Tx9B!@Bf(+;I6y#VP&{)-Og zBY!Sr)xz9TO7|L(0+wd}l{q&zR~d9;hD2t93398&O`R8$yC6=zp)#AO>*ZIO$hS4X z*nLc6iX|scg&F-^H2GY_I|bXZL+pbv9`dq;q}~mi6?5 zR&~zLChkf$M5Z~9J`9`aPZPGo#6^zNFCQ3As61DVK>+lZ(p)yKWyn%Q zHh|BJ7H%QZagk9DR8V;UfRzq1aZo{*!y}saaZj}Xu`w%FRwUYFOIkKqa;9Q?%#6bM zlVqr6wdQiaJhrL|v({urREdV6#T9?+8iZ~qv4F!|^pDJy3%EDXI<#j<7ONTW(^;P} z=^liRk8bqD9VSqB5@)U$X|->_ft4h)QA9uW({Z^*B~$1;gR_v$GQSf-8@s2e6i;T% zuOt)~b))tcJN}o&0h#MO_1c1VW*7tJ zJ9F?Ex5KTu<|P+rgh`kfoHE0|hf|aQZEH#^i#L`Z(LP%Ofj~X~_L29lsE_O622Bk% zVCXdKWqDpHoav9Vctn3>z# z6dyzqqr0R7YF<&Y`O!T8J&ZiqL~TzcJ#~DzRQpl)O(^~OIO3%GSlVli z=`rmLSHOFHu7XzNt#e&XFZ4USXj> z^2(r(8z7mMaj`NRJ%kW$3pLH^>X>~e?|{CL_I5AWLlp-JOw)1a8XPht%1p!L5}W3x z?`v1ZmAbk_i>*!>x><_HQ^>GTL)@w6V5+W&Dl>FgxweaF1SfPe2-p(Vo*1~ z7qsHUPqYmE`y)%KT8XtecThV0zsjuou0~33PN#$LNT{u|j$FCD>{hBoFC=uK;boTE zZ)E?N#}CF!om6=-%Z~67Ufwx=(u>D|WI>P6JWhw2j>j$@t%CJ`N^A#_g$oO5qwbtlEyJQ`#@ard;g^su_+KxIK6==W z^mbZf;{=+TSM$1k+V>_%4nV#RQ(N&o_&WdlEMGP3ck;GSK6hvJq_RD3#){%+4%#@7 zn5`~1$4Nkkx;0$okdM{109Xl}1+Cpoam>yfctY+Q_ns3#CeK~kg^ZGN%>ll)=ezE5 zv2w1?gh_W+v87i~#X7{EDn_WTuAVy3fxMA!-$<>p`BB z^s*?jVUtwlK1deneRO=Gpsi!&WGeOjWJ_bH%iIqZm}c_;(MR1)m}=QHWUlpgSuU9B zj!28J@5Q{PJ$r!p1;dg(%o(dW1v^}uLD@`}2~O`DVO{T2A$8^YI zC2p6}q|*ly0~|{M%ssY4uQ+v&LLjU~aoEC4h6Yoo&B+o<&9}gA8tU zxiLw2;k7Ur`6B+R6Hj0-%d*75^ zW;bopxaxFHRORdNXLKV4ExB{f`1X>ZXL)PxHLdy3=+tK&`3}CuHy!Cj?YcP0k zZEtaL$@BA}|JW&w3a@%%t2so`Mtx3+Hk!Et-x({TiLtX|zW_7(QB<^AlKeoH_9 zZ|C`5#PDc7S6uk1BPF@1Z_&s0<0K6Mt@_)D^Y9YI_8*4BW-lns$^5rd_5lB%mk|Q- zt~~^AK18=}p!4Ufn1CDbF>Q}`#OFh~!QpfC(eopZkN-JX%WKZ@CX=TlZPXP+xT_cN zfu8TRdr~Lz@+dg<&c3$eJNW$rB|Yv@5bJQ&bE$M#Nkk}AsLJ>4yL4mw&fp5lb3-s! zfbT0}{xzevF~@d?jo5?$h=0eb&dK+JfhqY^6)OJv z{8y)%JN2*M!R^WFN=lgS_8j#9R>_H4#lX>jvVI3U>RkDL{sRRw5QheF|2-n{e;?P_ zS9Yl23MjPA)+wuh(4@akex>*8K-M#SVR(oc?+GaBx<4cPyulx>^KZ8Z+ARbgKd;?G z@qiiztWf)JF20KRISt@I`Jh5N0(%<Sr5%xz9+Sg=LcfPyh2P%Hipz zI#kea(m3k6|JL^YS$l`84D)+Gvs2CgJuAm0Iqh|GT~#~Z;n`i!`GfoEh$GC!y||g{ zVm&cIc-cfrcI{BW!NZ1LbZXDv;0jR#vM;s7$1j&dFDe%2NLz zHuF+*c-vb8CI{tq|H>`|Lb6#n$ z4n{{kh(8m)e1Scal@Qf%K^q5>2>#@Kr-ADNS`7#IscpZ`xiEpR1$=FfBaS<-$F2kZ zt_X3w-b0`cAM5=^Bpb-_?>)~mK%y@kjNHEO-|OTxy!=<*lL#mAdY?dZ$VmQsytCq} z+tx5-vjRtn#%% z_!k!DeGam`gZw>je{YW;FD<<;W0mW=xvO0TyO13>9U7D!Ttm{mdq%+>y1Ca<*WL3C z@y9)Ugao}GuP&dyb;kv?;ro!azAEvCF$jm`T$(F-6An;HVRK;ev1ZWy8MfK z1$+BHO{FmTFyhYLox%wywRas1gofQAPbQ-^SATK$8K3QhfErE| zIgqcp3;T~}fx|SW|JzlGbz1LeY4W}>DE*~lUl4@eM_hn;ZhhUo`@a==A=H6xItX|D z`PQF%82`7bUCkUE0r$7U{Y;g5Gb~T{*%5{v8jnAWMoIVLbsSUI**8N&w|z(m>Ba`E zs|RiOvV0>yffN5)51TxA1kVD88a#`G;j9Vm=#j(HnFZYC%^l&)9vLV;R>gIsBe_2)E7obEO~(wAyq_ahx&B1Fc0rh;4P4^DZ%*JnE7g2lnmWulwh@ z?Khr)#-zFV2l;-3ky_Y2{$C~!|G(R9p77TTX`gr1y5q#F^rfQwYx!qFe7ltN0U$M# zyX!abX7g0pw%|b+3E*})umI0v(?xocNSWlQ>QLaycj$g*Mc~R`?!*5R6UC=ishq^& z3QFJ9pn1D6SnUy?fWiu{+;uK!y8lXGJU_l>CEz5it>BP`o1q|T>d@m&pBP;vhtja zPsL}ROUrDpTm0se|4=1jN{b)`)QN4cl^ShY~q^jpttV-6* z`7pEp;f>>^_hp_{$-n(7UAOJAmj=i`m;;Xi*|-<7;#*B+)y%k$s2mg$P7wq=0Z zMl&rpdv(85@d7ngyZjb~fE%k&`rMjX8tJpdw2fu!Rs&mrUa1pi3+wBCYxCBByvTS{ zq^uvXZS~Wx_~f}aN4&fLUakFJ`1h%SPRVyrbI~h#oyngYp+`HXi|u~$sQbq67kh!X zA#%r5=ABcxuCQ36t7wt&3EuE|(?6fLo3Z)##C+M%wi=r=>zw!NRK6~~Ui9ICqMpXP zr>o3!pRJjj{_$+}`_$87z{V@M4g1sO@6S8M=buh=mwUL$JKlcv1cTjbATK< These two hooks are not the only way to store state. You can always build your own hooks! diff --git a/docs/guide/src/interactivity/index.md b/docs/guide/src/interactivity/index.md index 670ca5a40..5429402b0 100644 --- a/docs/guide/src/interactivity/index.md +++ b/docs/guide/src/interactivity/index.md @@ -1,215 +1,3 @@ -# Adding Interactivity +# Interactivity -So far, we've learned how to describe the structure and properties of our user interfaces. Unfortunately, they're static and quite uninteresting. In this chapter, we're going to learn how to add interactivity through events, state, and tasks. - -## Primer on interactivity - -Before we get too deep into the mechanics of interactivity, we should first understand how Dioxus exactly chooses to handle user interaction and updates to your app. - -### What is state? - -Every app you'll ever build has some sort of information that needs to be rendered to the screen. Dioxus is responsible for translating your desired user interface to what is rendered to the screen. *You* are responsible for providing the content. - -The dynamic data in your user interface is called `State`. - -When you first launch your app with `dioxus::web::launch_with_props` you'll be providing the initial state. You need to declare the initial state *before* starting the app. - -```rust -fn main() { - // declare our initial state - let props = PostProps { - id: Uuid::new_v4(), - score: 10, - comment_count: 0, - post_time: std::time::Instant::now(), - url: String::from("dioxuslabs.com"), - title: String::from("Hello, world"), - original_poster: String::from("dioxus") - }; - - // start the render loop - dioxus::desktop::launch_with_props(Post, props); -} -``` - -When Dioxus renders your app, it will pass an immutable reference to `PostProps` into your `Post` component. Here, you can pass the state down into children. - -```rust -fn App(cx: Scope) -> Element { - cx.render(rsx!{ - Title { title: &cx.props.title } - Score { score: &cx.props.score } - // etc - }) -} -``` - -State in Dioxus follows a pattern called "one-way data-flow." As your components create new components as their children, your app's structure will eventually grow into a tree where state gets passed down from the root component into "leaves" of the tree. - -You've probably seen the tree of UI components represented using a directed acyclic graph: - -![image](../images/component_tree.png) - -With Dioxus, your state will always flow down from parent components into child components. - -### How do I change my app's state? - -We've talked about the data flow of state, but we haven't yet talked about how to change that state dynamically. Dioxus provides a variety of ways to change the state of your app while it's running. - -For starters, we _could_ use the `update_root_props` method on the VirtualDom to provide an entirely new root state of your App. However, for most applications, you probably don't want to regenerate your entire app just to update some text or a flag. - -Instead, you'll want to store state internally in your components and let *that* flow down the tree. To store state in your components, you'll use something called a `hook`. Hooks are special functions that reserve a slot of state in your component's memory and provide some functionality to update that state. - -The most common hook you'll use for storing state is `use_state`. `use_state` provides a slot for some data that allows you to read and update the value without accidentally mutating it. - -```rust -fn App(cx: Scope)-> Element { - let post = use_state(&cx, || { - PostData { - id: Uuid::new_v4(), - score: 10, - comment_count: 0, - post_time: std::time::Instant::now(), - url: String::from("dioxuslabs.com"), - title: String::from("Hello, world"), - original_poster: String::from("dioxus") - } - }); - - cx.render(rsx!{ - Title { title: &post.title } - Score { score: &post.score } - // etc - }) -} -``` - -Whenever we have a new post that we want to render, we can call `set_post` and provide a new value: - -```rust -set_post(PostData { - id: Uuid::new_v4(), - score: 20, - comment_count: 0, - post_time: std::time::Instant::now(), - url: String::from("google.com"), - title: String::from("goodbye, world"), - original_poster: String::from("google") -}) -``` - -We'll dive deeper into how exactly these hooks work later. - -### When do I update my state? - -There are a few different approaches to choosing when to update your state. You can update your state in response to user-triggered events or asynchronously in some background task. - -### Updating state in listeners - -When responding to user-triggered events, we'll want to "listen" for an event on some element in our component. - -For example, let's say we provide a button to generate a new post. Whenever the user clicks the button, they get a new post. To achieve this functionality, we'll want to attach a function to the `onclick` method of `button`. Whenever the button is clicked, our function will run, and we'll get new Post data to work with. - -```rust -fn App(cx: Scope)-> Element { - let post = use_state(&cx, || PostData::new()); - - cx.render(rsx!{ - button { - onclick: move |_| post.set(PostData::random()) - "Generate a random post" - } - Post { props: &post } - }) -} -``` - -We'll dive much deeper into event listeners later. - -### Updating state asynchronously - -We can also update our state outside of event listeners with `futures` and `coroutines`. - -- `Futures` are Rust's version of promises that can execute asynchronous work by an efficient polling system. We can submit new futures to Dioxus either through `push_future` which returns a `TaskId` or with `spawn`. -- `Coroutines` are asynchronous blocks of our component that have the ability to cleanly interact with values, hooks, and other data in the component. - -Since coroutines and Futures stick around between renders, the data in them must be valid for the `'static` lifetime. We must explicitly declare which values our task will rely on to avoid the `stale props` problem common in React. - -We can use tasks in our components to build a tiny stopwatch that ticks every second. - -> Note: The `use_future` hook will start our coroutine immediately. The `use_coroutine` hook provides more flexibility over starting and stopping futures on the fly. - -```rust -fn App(cx: Scope)-> Element { - let elapsed = use_state(&cx, || 0); - - use_future(&cx, (), |()| { - to_owned![elapsed]; // explicitly capture this hook for use in async - async move { - loop { - gloo_timers::future::TimeoutFuture::new(1_000).await; - elapsed.modify(|i| i + 1) - } - } - }); - - rsx!(cx, div { "Current stopwatch time: {elapsed}" }) -} -``` - -Using asynchronous code can be difficult! This is just scratching the surface of what's possible. We have an entire chapter on using async properly in your Dioxus Apps. - -### How do I tell Dioxus that my state changed? - -Whenever you inform Dioxus that the component needs to be updated, it will "render" your component again, storing the previous and current Elements in memory. Dioxus will automatically figure out the differences between the old and the new and generate a list of edits that the renderer needs to apply to change what's on the screen. This process is called "diffing": - -![Diffing](../images/diffing.png) - -In React, the specifics of when a component gets re-rendered is somewhat blurry. With Dioxus, any component can mark itself as "dirty" through a method on `Context`: `needs_update`. In addition, any component can mark any _other_ component as dirty provided it knows the other component's ID with `needs_update_any`. - -With these building blocks, we can craft new hooks similar to `use_state` that let us easily tell Dioxus that new information is ready to be sent to the screen. - -### How do I update my state efficiently? - -In general, Dioxus should be plenty fast for most use cases. However, there are some rules you should consider following to ensure your apps are quick. - -1) **Don't call set_state _while rendering_**. This will cause Dioxus to unnecessarily re-check the component for updates or enter an infinite loop. -2) **Break your state apart into smaller sections.** Hooks are explicitly designed to "unshackle" your state from the typical model-view-controller paradigm, making it easy to reuse useful bits of code with a single function. -3) **Move local state down**. Dioxus will need to re-check child components of your app if the root component is constantly being updated. You'll get best results if rapidly-changing state does not cause major re-renders. - - - -## The `Scope` object - -Though very similar to React, Dioxus is different in a few ways. Most notably, React components will not have a `Scope` parameter in the component declaration. - -Have you ever wondered how the `useState()` call works in React without a `this` object to actually store the state? - -```javascript -// in React: -function Component(props) { - // This state persists between component renders, but where does it live? - let [state, set_state] = useState(10); -} -``` - -React uses global variables to store this information. However, global mutable variables must be carefully managed and are broadly discouraged in Rust programs. Because Dioxus needs to work with the rules of Rust it uses the `Scope` rather than a global state object to maintain some internal bookkeeping. - -That's what the `Scope` object is: a place for the Component to store state, manage listeners, and allocate elements. Advanced users of Dioxus will want to learn how to properly leverage the `Scope` object to build robust and performant extensions for Dioxus. - -```rust -fn Post(cx: Scope) -> Element { - cx.render(rsx!("hello")) -} -``` - -## Moving On - -This overview was a lot of information - but it doesn't tell you everything! - -In the next sections we'll go over: -- `use_state` in depth -- `use_ref` and other hooks -- Handling user input +So far, we've learned how to describe the structure and properties of our user interfaces. However, most interfaces need to be interactive in order to be useful. In this chapter, we describe how to make a Dioxus app that responds to the user. \ No newline at end of file diff --git a/docs/guide/src/interactivity/lifecycles.md b/docs/guide/src/interactivity/lifecycles.md deleted file mode 100644 index 1d6ec4f15..000000000 --- a/docs/guide/src/interactivity/lifecycles.md +++ /dev/null @@ -1,11 +0,0 @@ -# Effects - -In theory, your UI code should be side-effect free. Whenever a component renders, all of its state should be prepared ahead of time. In reality, we often need to perform some sort of side effect. Possible effects include: - -- Logging some data -- Pre-fetching some data -- Attaching code to native elements -- Cleaning up - -This section is organized under interactivity because effects can be important to add things like transitions, videos, and other important media. - diff --git a/docs/guide/src/state/router.md b/docs/guide/src/interactivity/router.md similarity index 87% rename from docs/guide/src/state/router.md rename to docs/guide/src/interactivity/router.md index 7682ed24a..e1d170ec3 100644 --- a/docs/guide/src/state/router.md +++ b/docs/guide/src/interactivity/router.md @@ -2,7 +2,7 @@ In many of your apps, you'll want to have different "scenes". For a webpage, these scenes might be the different webpages with their own content. -You could write your own scene management solution - quite simply too. However, to save you the effort, Dioxus supports a first-party solution for scene management called Dioxus Router. +You could write your own scene management solution – quite simply too. However, to save you the effort, Dioxus supports a first-party solution for scene management called Dioxus Router. ## What is it? @@ -13,7 +13,7 @@ For an app like the Dioxus landing page (https://dioxuslabs.com), we want to hav - Blog - Example showcase -Each of these scenes is independent - we don't want to render both the homepage and blog at the same time. +Each of these scenes is independent – we don't want to render both the homepage and blog at the same time. This is where the router crates come in handy. To make sure we're using the router, simply add the `"router"` feature to your dioxus dependency. diff --git a/docs/guide/src/interactivity/sharing_state.md b/docs/guide/src/interactivity/sharing_state.md new file mode 100644 index 000000000..1a0be57ec --- /dev/null +++ b/docs/guide/src/interactivity/sharing_state.md @@ -0,0 +1,66 @@ +# Sharing State + +Often, multiple components need to access the same state. Depending on your needs, there are several ways to implement this. + +## Lifting State + +One approach to share state between components is to "lift" it up to the nearest common ancestor. This means putting the `use_state` hook in a parent component, and passing the needed values down as props. + +For example, suppose we want to build a meme editor. We want to have an input to edit the meme caption, but also a preview of the meme with the caption. Logically, the meme and the input are 2 separate components, but they need access to the same state (the current caption). + +> Of course, in this simple example, we could write everything in one component – but it is better to split everything out in smaller components to make the code more reusable and easier to maintain (this is even more important for larger, complex apps). + +We start with a `Meme` component, responsible for rendering a meme with a given caption: +```rust +{{#include ../../examples/meme_editor.rs:meme_component}} +``` + +> Note that the `Meme` component is unaware where the caption is coming from – it could be stored in `use_state`, `use_ref`, or a constant. This ensures that it is very reusable – the same component can be used for a meme gallery without any changes! + +We also create a caption editor, completely decoupled from the meme. The caption editor must not store the caption itself – otherwise, how will we provide it to the `Meme` component? Instead, it should accept the current caption as a prop, as well as an event handler to delegate input events to: + +```rust +{{#include ../../examples/meme_editor.rs:caption_editor}} +``` + +Finally, a third component will render the other two as children. It will be responsible for keeping the state and passing down the relevant props. +```rust +{{#include ../../examples/meme_editor.rs:meme_editor}} +``` +![Meme Editor Screenshot: An old plastic skeleton sitting on a park bench. Caption: "me waiting for a language feature"](./images/meme_editor_screenshot.png) + +## Using Context + +Sometimes, some state needs to be shared between multiple components far down the tree, and passing it down through props is very inconvenient. + +Suppose now that we want to implement a dark mode toggle for our app. To achieve this, we will make every component select styling depending on whether dark mode is enabled or not. + +> Note: we're choosing this approach for the sake of an example. There are better ways to implement dark mode (e.g. using CSS variables). Let's pretend CSS variables don't exist – welcome to 2013! + +Now, we could write another `use_state` in the top component, and pass `is_dark_mode` down to every component through props. But think about what will happen as the app grows in complexity – almost every component that renders any CSS is going to need to know if dark mode is enabled or not – so they'll all need the same dark mode prop. And every parent component will need to pass it down to them. Imagine how messy and verbose that would get, especially if we had components several levels deep! + +Dioxus offers a better solution than this "prop drilling" – providing context. The [`use_context_provider`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_context_provider.html) hook is similar to `use_ref`, but it makes it available through [`use_context`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_context.html) for all children components. + +First, we have to create a struct for our dark mode configuration: + +```rust +{{#include ../../examples/meme_editor_dark_mode.rs:DarkMode_struct}} +``` + +Now, in a top-level component (like `App`), we can provide the `DarkMode` context to all children components: +```rust +{{#include ../../examples/meme_editor_dark_mode.rs:context_provider}} +``` + +As a result, any child component of `App` (direct or not), can access the `DarkMode` context. +```rust +{{#include ../../examples/meme_editor_dark_mode.rs:use_context}} +``` + +> `use_context` returns `Option>` here. If the context has been provided, the value is `Some(UseSharedState)`, which you can call `.read` or `.write` on, similarly to `UseRef`. Otherwise, the value is `None`. + +For example, here's how we would implement the dark mode toggle, which both reads the context (to determine what color it should render) and writes to it (to toggle dark mode): +```rust +{{#include ../../examples/meme_editor_dark_mode.rs:toggle}} +``` + diff --git a/docs/guide/src/interactivity/user_input.md b/docs/guide/src/interactivity/user_input.md index e878afbbe..4ccf4a422 100644 --- a/docs/guide/src/interactivity/user_input.md +++ b/docs/guide/src/interactivity/user_input.md @@ -1,82 +1,31 @@ -# User Input and Controlled Components +# User Input -Handling user input is one of the most common things your app will do, but it *can* be tricky. - -The reactive paradigm and one-way-data-flow models were all derived to solve problems that can crop up around user input handling. This section will teach you about two effective patterns for handling user input: controlled and uncontrolled inputs. +Interfaces often need to provide a way to input data: e.g. text, numbers, checkboxes, etc. In Dioxus, there are two ways you can work with user input. ## Controlled Inputs -The most common approach to handling input from elements is through "controlled" inputs. With this pattern, we drive the value of the input from our state, while simultaneously updating our state from new values. - -This is the most common form of input handling and is widely used because it prevents the UI from being out of sync with your local state. +With controlled inputs, you are directly in charge of the state of the input. This gives you a lot of flexibility, and makes it easy to keep things in sync. For example, this is how you would create a controlled text input: ```rust -let name = use_state(&cx, || "bob".to_string()); - -cx.render(rsx!{ - input { - value: "{name}", - oninput: move |evt| name.set(evt.value.clone()), - } -}) +{{#include ../../examples/input_controlled.rs:component}} ``` -Why not just "bind" like in other frameworks? - -In a handful of cases, you don't want the inputted value to match what's rendered to the screen. Let's say we want to implement an input that converts the input to uppercase when the input matches a certain value. With binding, we're forced to share the same input and state value. By explicitly handling the oninput case, we're given the opportunity to set a *new* value. - - -```rust -let name = use_state(&cx, || "bob".to_string()); - -cx.render(rsx!{ - input { - value: "{name}", - oninput: move |evt| { - if evt.value == "tim" { - name.set("TIM"); - } - }, - } -}) -``` - - -## Binding - ->! Note - binding is currently not implemented in Dioxus. This section represents a future in-progress feature. - -Because the above pattern is so common, we have an additional attribute called "bind" which is essentially a shorthand for our code above. - -Bind just connects an oninput to a `UseState` and is implemented through the signal system. - -```rust -let name = use_state(&cx, || "bob".to_string()); - -cx.render(rsx!{ - input { bind: name } -}) -``` +Notice the flexibility – you can: +- Also display the same contents in another element, and they will be in sync +- Transform the input every time it is modified (e.g. to make sure it is upper case) +- Validate the input every time it changes +- Have custom logic happening when the input changes (e.g. network request for autocompletion) +- Programmatically change the value (e.g. a "randomize" button that fills the input with nonsense) ## Uncontrolled Inputs -When working with large sets of inputs, you might be quickly tired of creating `use_state` for each value. Additionally, the pattern of one `use_state` per interaction might deteriorate when you need to have a flexible number of inputs. In these cases, we use "uncontrolled" inputs. Here, we don't drive the value of the input from the `use_state`, choosing to leave it in an "uncontrolled" state. +As an alternative to controlled inputs, you can simply let the platform keep track of the input values. If we don't tell a HTML input what content it should have, it be editable anyway (this is built into the webview). This approach can be more performant, but less flexible. For example, it's harder to keep the input in sync with another element. -This approach can be more performant and more flexible, but more prone to UI inconsistencies than its controlled counterpart. - -To use the "uncontrolled" pattern, we simply omit setting the value of the input. Instead, we can react to the change directly on the input itself, or from a form element higher up in the tree. - -For this example, we don't attach any `use_state` handles into the labels. Instead, we simply attach an `oninput` handler to the form element. This will run each time any of the child inputs change, allowing us to perform tasks like form validation. +Since you don't necessarily have the current value of the uncontrolled input in state, you can access it either by listening to `oninput` events (similarly to controlled components), or, if the input is part of a form, you can access the form data in the form events (e.g. `oninput` or `onsubmit`): ```rust -form { - oninput: move |evt| { - if !validate_input(evt.values) { - // display what errors validation resulted in - } - }, - input { name: "name", } - input { name: "age", } - input { name: "date", } -} +{{#include ../../examples/input_uncontrolled.rs:component}} ``` +``` +Submitted! UiEvent { data: FormData { value: "", values: {"age": "very old", "date": "1966", "name": "Fred"} } } +``` \ No newline at end of file diff --git a/docs/guide/src/interactivity/useref.md b/docs/guide/src/interactivity/useref.md deleted file mode 100644 index e8eda8e83..000000000 --- a/docs/guide/src/interactivity/useref.md +++ /dev/null @@ -1,155 +0,0 @@ -# UseRef - -You might've noticed a fundamental limitation to `use_state`: to modify the value in-place, it must be cheaply cloneable. But what if your type is not cheap to clone? - -In these cases, you should reach for `use_ref` which is essentially just a glorified `Rc>` (Rust [smart pointers](https://doc.rust-lang.org/book/ch15-04-rc.html)). - -This provides us some runtime locks around our data, trading reliability for performance. For most cases though, you will find it hard to make `use_ref` crash. - -> Note: this is *not* exactly like its React counterpart since calling `write` will cause a re-render. For more React parity, use the `write_silent` method. - -To use the hook: - -```rust -let names = use_ref(&cx, || vec!["susie", "calvin"]); -``` - -To read the hook values, use the `read()` method: - -```rust -cx.render(rsx!{ - ul { - names.read().iter().map(|name| { - rsx!{ "{name}" } - }) - } -}) -``` - -And then to write into the hook value, use the `write` method: - -```rust -names.write().push("Tiger"); -``` - -If you don't want to re-render the component when names is updated, then we can use the `write_silent` method: - -```rust -names.write_silent().push("Transmogrifier"); -``` - -Again, like `UseState`, the `UseRef` handle is clonable into async contexts: - - -```rust -// infinitely push calvin into the list -cx.spawn({ - to_owned![names]; - async move { - loop { - wait_ms(100).await; - names.write().push("Calvin"); - } - } -}) -``` - -## Using UseRef for complex state - -The best use case of `use_ref` is to manage "complex" data local to your component. This should be things like large structs, collections, queues, state machines, and other data where cloning would be expensive. - - -```rust -let val = use_ref(&cx, || vec![1, 3, 3, 7]); -let val = use_ref(&cx, || (0..10000).collect::x>()); -let val = use_ref(&cx, || Configuration { - a: "asdasd", - // .. more complex fields -}); -``` - -UseRef can be sent down into child components too. - -UseRef memoizes with itself, performing a cheap pointer comparison. If the UseRef handle is the same, then the component can be memoized. - -```rust - -fn app(cx: Scope) -> Element { - let val = use_ref(&cx, || 0); - - cx.render(rsx!{ - Child { val: val.clone() } - }) -} - -#[inline_props] -fn Child(cx: Scope, val: UseRef) -> Element { - // ... -} -``` - -## Using UseRef with "models" - -One option for state management that UseRef enables is the development of a "model" for your components. This particular pattern enables you to model your state with regular structs. - -For instance, our calculator example uses a struct to model the state. - -```rust - -struct Calculator { - display_value: String, - operator: Option, - waiting_for_operand: bool, - cur_val: f64, -} -``` - -Our component is really simple - we just call `use_ref` to get an initial calculator state. - -```rust -fn app(cx: Scope) -> Element { - let state = use_ref(&cx, Calculator::new); - - cx.render(rsx!{ - // the rendering code - }) -} -``` - -In our UI, we can then use `read` and a helper method to get data out of the model. - -```rust -// Our accessor method -impl Calculator { - fn formatted_display(&self) -> String { - self.display_value - .parse::() - .unwrap() - .separated_string() - } -} - -// And then in the UI -cx.render(rsx!{ - div { [state.read().formatted_display()] } -}) -``` - -To modify the state, we can setup a helper method and then attach it to a callback. - -```rust -// our helper -impl Calculator { - fn clear_display(&mut self) { - self.display_value = "0".to_string() - } -} - -// our callback -cx.render(rsx!{ - button { - onclick: move |_| state.write().clear_display(), - } -}) -``` - diff --git a/docs/guide/src/interactivity/usestate.md b/docs/guide/src/interactivity/usestate.md deleted file mode 100644 index 64aa81d59..000000000 --- a/docs/guide/src/interactivity/usestate.md +++ /dev/null @@ -1,114 +0,0 @@ -# Fundamental hook: `use_state` - -The first fundamental hook for state management is `use_state`. This particular hook is designed to work well with the entire Dioxus ecosystem including futures, children, and memoization. - - -## Basic usage - -The simplest use case of `use_state` is a simple counter. The handle returned by `use_state` implements `Add` and `AddAssign`. Writing through `AddAssign` will automatically mark the component as dirty, forcing an update. - -```rust -fn app(cx: Scope) -> Element { - let count = use_state(&cx, || 0); - - rsx!(cx, button { onclick: move |_| count += 1, }) -} -``` - -## Reference - -### Common ops - -The `use_state` hook is very similar to its React counterpart. When we use it, we get a smart pointer - essentially an `Rc` that tracks when we update it. - -```rust -let mut count = use_state(&cx, || 0); - -// then to set the count -count += 1; -``` - - -### Current value - -Our `count` value is more than just an integer. Because it's a smart pointer, it also implements other useful methods helpful in various contexts. - -For instance, we can get a handle to the current value at any time: - -```rust -let current: Rc = count.current(); -``` - -Or, we can get the inner handle to set the value: - -```rust -let setter: Rc = count.setter(); -``` - -### Modify - -Or, we can set a new value using the current value as a reference: - -```rust -count.modify(|i| i + 1); -``` - -### `with_mut` and `make_mut` - -If the value is cheaply cloneable, then we can call `with_mut` to get a mutable reference to the value: - -```rust -count.with_mut(|i| *i += 1); -``` - -Alternatively, we can call `make_mut` which gives us a `RefMut` to the underlying value: - -```rust -*count.make_mut() += 1; -``` - -### Use in Async - -Plus, the `set_count` handle is cloneable into async contexts, so we can use it in futures. - -```rust -// count up infinitely -cx.spawn({ - let count = count.clone(); - async move { - loop { - wait_ms(100).await; - count += 1; - } - } -}) -``` - -## Using UseState for simple data - -The best use case of `use_state` is to manage "simple" data local to your component. This should be things like numbers, strings, small maps, and cheaply-clonable types. - -```rust -let val = use_state(&cx, || 0); -let val = use_state(&cx, || "Hello!"); -let val = use_state(&cx, || vec![1, 3, 3, 7]); -``` - -UseState can be sent down into child components too. - -You can either pass by reference to always force the child to update when the value changes, or you can clone the handle to take advantage of automatic memoization. In these cases, calling "get" will return stale data - always prefer "current" when "cloning" the UseState. This automatic memoization of UseState solves a performance problem common in React. - -```rust - -fn app(cx: Scope) -> Element { - let val = use_state(&cx, || 0); - - cx.render(rsx!{ - Child { val: val.clone() } - }) -} - -fn Child(cx: Scope, val: UseState) -> Element { - // ... -} -``` diff --git a/docs/guide/src/lib.rs b/docs/guide/src/lib.rs new file mode 100644 index 000000000..97cda56a8 --- /dev/null +++ b/docs/guide/src/lib.rs @@ -0,0 +1 @@ +// empty (we only need this crate for the examples) diff --git a/docs/guide/src/misc/contributors.md b/docs/guide/src/misc/contributors.md deleted file mode 100644 index 9a7181a37..000000000 --- a/docs/guide/src/misc/contributors.md +++ /dev/null @@ -1,8 +0,0 @@ -# Contributors - -All pull requests (including those made by a team member) must be approved by at least one other team member. -Larger, more nuanced decisions about design, architecture, breaking changes, trade offs, etc are made by team consensus. - -Contributors to this guide: -- [jkelleyrtp](https://github.com/jkelleyrtp) -- [alexkirsz](https://github.com/alexkirsz) diff --git a/docs/guide/src/tutorial/publishing.md b/docs/guide/src/publishing/desktop.md similarity index 87% rename from docs/guide/src/tutorial/publishing.md rename to docs/guide/src/publishing/desktop.md index 89bf39edf..f30b0b26d 100644 --- a/docs/guide/src/tutorial/publishing.md +++ b/docs/guide/src/publishing/desktop.md @@ -59,7 +59,7 @@ For example, a macOS app would look like this: ![Published App](../images/publish.png) -Nice! And it's only 4.8 Mb - extremely lean!! Because Dioxus leverages your platform's native WebView, Dioxus apps are extremely memory efficient and won't waste your battery. +Nice! And it's only 4.8 Mb – extremely lean!! Because Dioxus leverages your platform's native WebView, Dioxus apps are extremely memory efficient and won't waste your battery. -> Note: not all CSS works the same on all platforms. Make sure to view your app's CSS on each platform - or web browser (Firefox, Chrome, Safari) before publishing. +> Note: not all CSS works the same on all platforms. Make sure to view your app's CSS on each platform – or web browser (Firefox, Chrome, Safari) before publishing. diff --git a/docs/guide/src/publishing/index.md b/docs/guide/src/publishing/index.md new file mode 100644 index 000000000..96670f1c8 --- /dev/null +++ b/docs/guide/src/publishing/index.md @@ -0,0 +1 @@ +# Publishing diff --git a/docs/guide/src/publishing/web.md b/docs/guide/src/publishing/web.md new file mode 100644 index 000000000..9c285a104 --- /dev/null +++ b/docs/guide/src/publishing/web.md @@ -0,0 +1,8 @@ +## Publishing with Github Pages +To build our app and publish it to Github: + +- Make sure GitHub Pages is set up for your repo +- Build your app with `trunk build --release` (include `--public-url ` to update asset prefixes if using a project site) +- Move your generated HTML/CSS/JS/Wasm from `dist` into the folder configured for Github Pages +- Add and commit with git +- Push to GitHub diff --git a/docs/guide/src/ROADMAP.md b/docs/guide/src/roadmap.md similarity index 81% rename from docs/guide/src/ROADMAP.md rename to docs/guide/src/roadmap.md index 9d2ff542c..3f0dac800 100644 --- a/docs/guide/src/ROADMAP.md +++ b/docs/guide/src/roadmap.md @@ -1,14 +1,14 @@ # Roadmap & Feature-set -Before we dive into Dioxus, feel free to take a look at our feature set and roadmap to see if what Dioxus can do today works for you. +This feature set and roadmap can help you decide if what Dioxus can do today works for you. If a feature that you need doesn't exist or you want to contribute to projects on the roadmap, feel free to get involved by [joining the discord](https://discord.gg/XgGxMSkvUM). Generally, here's the status of each platform: -- **Web**: Dioxus is a great choice for pure web-apps - especially for CRUD/complex apps. However, it does lack the ecosystem of React, so you might be missing a component library or some useful hook. +- **Web**: Dioxus is a great choice for pure web-apps – especially for CRUD/complex apps. However, it does lack the ecosystem of React, so you might be missing a component library or some useful hook. -- **SSR**: Dioxus is a great choice for pre-rendering, hydration, and rendering HTML on a web endpoint. Be warned - the VirtualDom is not (currently) `Send + Sync`. +- **SSR**: Dioxus is a great choice for pre-rendering, hydration, and rendering HTML on a web endpoint. Be warned – the VirtualDom is not (currently) `Send + Sync`. - **Desktop**: You can build very competent single-window desktop apps right now. However, multi-window apps require support from Dioxus core and are not ready. @@ -58,15 +58,11 @@ Generally, here's the status of each platform: - ✅ = implemented and working - 🛠 = actively being worked on - 👀 = not yet implemented or being worked on -- ❓ = not sure if will or can implement ## Roadmap These Features are planned for the future of Dioxus: ---- - - ### Core - [x] Release of Dioxus Core - [x] Upgrade documentation to include more theory and be more comprehensive @@ -115,3 +111,22 @@ These Features are planned for the future of Dioxus: - [ ] Resize observer +## Work in Progress + +### Build Tool + +We are currently working on our own build tool called [Dioxus CLI](https://github.com/DioxusLabs/cli) which will support: + +- an interactive TUI +- on-the-fly reconfiguration +- hot CSS reloading +- two-way data binding between browser and source code +- an interpreter for `rsx!` +- ability to publish to github/netlify/vercel +- bundling for iOS/Desktop/etc + +### LiveView / Server Component Support + +The internal architecture of Dioxus was designed from day one to support the `LiveView` use-case, where a web server hosts a running app for each connected user. As of today, there is no first-class LiveView support – you'll need to wire this up yourself. + +While not currently fully implemented, the expectation is that LiveView apps can be a hybrid between Wasm and server-rendered where only portions of a page are "live" and the rest of the page is either server-rendered, statically generated, or handled by the host SPA. diff --git a/docs/guide/src/setup.md b/docs/guide/src/setup.md deleted file mode 100644 index 3244ce301..000000000 --- a/docs/guide/src/setup.md +++ /dev/null @@ -1,114 +0,0 @@ -# Overview - -In this chapter, we're going to get set up with a small desktop application. - -We'll learn about: -- Installing the Rust programming language -- Installing the Dioxus CLI for bundling and developing -- Suggested cargo extensions - - -For platform-specific guides, check out the [Platform Specific Guides](/reference/platforms/index.md). - -# Setting up Dioxus - -Dioxus requires a few main things to get up and running: - -- The [Rust compiler](https://www.rust-lang.org) and associated build tooling -- An editor of your choice, ideally configured with the [Rust-Analyzer LSP plugin](https://rust-analyzer.github.io) - -Dioxus integrates very well with the Rust-Analyzer IDE plugin which will provide appropriate syntax highlighting, code navigation, folding, and more. - -## Installing Rust - -Head over to [https://rust-lang.org](http://rust-lang.org) and install the Rust compiler. - -Once installed, make sure to install wasm32-unknown-unknown as a target if you're planning on deploying your app to the web. - -``` -rustup target add wasm32-unknown-unknown -``` - -## Platform-Specific Dependencies - -If you are running a modern, mainstream operating system, you should need no additional setup to build WebView-based Desktop apps. However, if you are running an older version of Windows or a flavor of Linux with no default web rendering engine, you might need to install some additional dependencies. - - -### Windows - -Windows Desktop apps depend on WebView2 - a library which should be installed in all modern Windows distributions. If you have Edge installed, then Dioxus will work fine. If you *don't* have Webview2, [then you can install it through Microsoft](https://developer.microsoft.com/en-us/microsoft-edge/webview2/). MS provides 3 options: - -1. A tiny "evergreen" *bootstrapper* which will fetch an installer from Microsoft's CDN -2. A tiny *installer* which will fetch Webview2 from Microsoft's CDN -3. A statically linked version of Webview2 in your final binary for offline users - -For development purposes, use Option 1. - -### Linux - -Webview Linux apps require WebkitGtk. When distributing, this can be part of your dependency tree in your `.rpm` or `.deb`. However, it's very likely that your users will already have WebkitGtk. - -``` -sudo apt install libwebkit2gtk-4.0-dev libgtk-3-dev libappindicator3-dev -``` - -When using Debian/bullseye `libappindicator3-dev` is no longer available but replaced by `libayatana-appindicator3-dev`. - -``` -# on Debian/bullseye use: -sudo apt install libwebkit2gtk-4.0-dev libgtk-3-dev libayatana-appindicator3-dev -``` - -If you run into issues, make sure you have all the basics installed, as outlined in the [Tauri docs](https://tauri.studio/v1/guides/getting-started/prerequisites#setting-up-linux). - - -### macOS - -Currently - everything for macOS is built right in! However, you might run into an issue if you're using nightly Rust due to some permissions issues in our Tao dependency (which have been resolved but not published). - - -## Dioxus-CLI for dev server, bundling, etc. - -We also recommend installing the Dioxus CLI. The Dioxus CLI automates building and packaging for various targets and integrates with simulators, development servers, and app deployment. To install the CLI, you'll need cargo (which should be automatically installed with Rust): - -``` -$ cargo install dioxus-cli -``` - -You can update dioxus-cli at any time with: - -``` -$ cargo install --force dioxus-cli -``` - -We provide this 1st-party tool to save you from having to run potentially untrusted code every time you add a crate to your project - as is standard in the NPM ecosystem. - -## Suggested extensions - -If you want to keep your traditional `npm install XXX` workflow for adding packages, you might want to install `cargo-edit` and a few other fun `cargo` extensions: - -- [cargo edit](https://github.com/killercup/cargo-edit) for adding dependencies from the CLI -- [cargo-expand](https://github.com/dtolnay/cargo-expand) for expanding macro calls -- [cargo tree](https://doc.rust-lang.org/cargo/commands/cargo-tree.html) - an integrated cargo command that lets you inspect your dependency tree - -That's it! We won't need to touch NPM/WebPack/Babel/Parcel, etc. However, you _can_ configure your app to use WebPack with [traditional WASM-pack tooling](https://rustwasm.github.io/wasm-pack/book/tutorials/hybrid-applications-with-webpack/using-your-library.html). - -## Rust Knowledge - -With Rust, things like benchmarking, testing, and documentation are included in the language. We strongly recommend going through the official Rust book _completely_. However, our hope is that a Dioxus app can serve as a great first Rust project. With Dioxus you'll learn about: - -- Error handling -- Structs, Functions, Enums -- Closures -- Macros - -We've put a lot of care into making Dioxus syntax familiar and easy to understand, so you won't need deep knowledge on async, lifetimes, or smart pointers until you really start building complex Dioxus apps. - -We strongly encourage exploring the guides for more information on how to work with the integrated tooling: - -- [Testing](Testing.md) -- [Documentation](Documentation.md) -- [Benchmarking](Benchmarking.md) -- [Building](Building.md) -- [Modules](Modules.md) -- [Crates](Crates.md) diff --git a/docs/guide/src/state/fermi.md b/docs/guide/src/state/fermi.md deleted file mode 100644 index 541621840..000000000 --- a/docs/guide/src/state/fermi.md +++ /dev/null @@ -1,110 +0,0 @@ -# Fermi - -After having covered local and global state, you're definitely ready to start building some complex Dioxus apps. Before you get too far, check out the Fermi crate. Fermi makes it dead-easy to manage global state and scales to the largest of apps. - -## What is Fermi for? - -If you're building an app that has scaled past a few small components, then it'll be worth sketching out and organizing your app's state. Fermi makes it easy to transition from a simple app that relies on `use_state` to an app with dozens of components. - -> To put it simply - Fermi is the ideal crate for managing global state in your Dioxus app. - - -## How do I use it? - -To add fermi to your project, simply add the "fermi" feature to your Dioxus dependency. - -```toml -[dependencies] -dioxus = { version = "0.2", features = ["desktop", "fermi"] } -``` - -Fermi is built on the concept of "atoms" of global state. Instead of bundling all our state together in a single mega struct, we actually chose to implement it piece-by-piece with functions. - -Each piece of global state in your app is represented by an "atom." - -```rust -static TITLE: Atom = |_| "Defualt Title".to_string(); -``` - -This atom can be then used the with the `use_atom` hook as a drop-in replacement for `use_state`. - -```rust -static TITLE: Atom = |_| "Defualt Title".to_string(); - -fn Title(cx: Scope) -> Element { - let title = use_atom(&cx, TITLE); - - cx.render(rsx!{ - button { onclick: move |_| title.set("new title".to_string()) } - }) -} -``` - -However, Fermi really becomes useful when we want to share the value between two different components. - -```rust -static TITLE: Atom = |_| "Defualt Title".to_string(); - -fn TitleBar(cx: Scope) -> Element { - let title = use_atom(&cx, TITLE); - - rsx!{cx, button { onclick: move |_| title.set("titlebar title".to_string()) } } -} - -fn TitleCard(cx: Scope) -> Element { - let title = use_atom(&cx, TITLE); - - rsx!{cx, button { onclick: move |_| title.set("title card".to_string()) } } -} -``` - -These two components can get and set the same value! - - -## Use with collections - -Fermi gets *really* powerful when used to manage collections of data. Under the hood, Fermi uses immutable collections and tracks reads and writes of individual keys. This makes it easy to implement things like lists and infinite posts with little performance penalty. It also makes it really easy to refactor our app and add new fields. - -```rust -static NAMES: AtomRef = |builder| {}; -static CHECKED: AtomRef = |builder| {}; -static CREATED: AtomRef = |builder| {}; -``` - -To use these collections: - -```rust -#[inline_props] -fn Todo(cx: Scope, id: Uuid) -> Element { - let name = use_atom(&cx, NAMES.select(id)); - let checked = use_atom(&cx, CHECKED.select(id)); - let created = use_atom(&cx, CREATED.select(id)); - - // or - - let (name, checked, created) = use_atom(&cx, (NAMES, CHECKED, CREATED).select(id)); -} -``` - -This particular pattern might seem strange at first - "why isn't all of our state under one struct?" - but eventually shows its worth when dealing with large amounts of data. By composing collections together, we can get get the perks of the Entity-Component-System architecture in our Dioxus apps. Performance is quite predictable here and easy to trace. - -## AtomRef - -Much like `use_ref` can be used to manage complex state locally, `AtomRef` can be used to manage complex global state. `AtomRef` is basically a global `Rc>` with mutation tracking. - -It too serves as a basic replacement for `use_ref`: - -```rust -fn Todo(cx: Scope) -> Element { - let cfg = use_atom_ref(&cx, CFG); - - cfg.write().enable_option(); -} - -``` - -## Future Reading - -This guide is meant just to be an overview of Fermi. This page is just a short advertisement for what we consider the best state management solution available today for Dioxus apps. - -For further reading, check out the [crate itself](https://github.com/DioxusLabs/dioxus/tree/master/packages/fermi)! diff --git a/docs/guide/src/state/liftingstate.md b/docs/guide/src/state/liftingstate.md deleted file mode 100644 index 9974c8326..000000000 --- a/docs/guide/src/state/liftingstate.md +++ /dev/null @@ -1,130 +0,0 @@ -# Lifting State and Fanning Out - -Maintaining state local to components doesn't always work. - -One of the most reliable state management patterns in large Dioxus apps is to `lift-up` and `fan-out`. Lifting up and fanning-out state is the ideal way to structure your app to maximize code reuse, testability, and deterministic rendering. - - -## Lifting State - -When building complex apps with Dioxus, the best approach is to start by placing your state and an UI all within a single component. Once your component has passed a few hundred lines, then it might be worth refactoring it into a few smaller components. - -Here, we're now challenged with how to share state between these various components. - -Let's say we refactored our component to separate an input and a display. - -```rust -fn app(cx: Scope) -> Element { - cx.render(rsx!{ - Title {} - Input {} - }) -} -``` - -Whenever a value is inputted in our `Input` component, we need to somehow propagate those changes into the `Title` component. - -A quick-and-dirty solution - which works for many apps - is to simply share a UseState between the two components. - -```rust -fn app(cx: Scope) -> Element { - let text = use_state(&cx, || "default".to_string()); - - cx.render(rsx!{ - Title { text: text.clone() } - Input { text: text.clone() } - }) -} -``` - -> Note: since we `Cloned` our `text` `UseState` handle, both `Title` and `Input` will be memoized. - -Here, we've "lifted" state out of our `Input` component and brought it up to the closest shared ancestor. In our input component, we can directly use this UseState handle as if it had been defined locally: - -```rust -#[inline_props] -fn Input(cx: Scope, text: UseState) -> Element { - cx.render(rsx!{ - input { oninput: move |evt| text.set(evt.value.clone()) } - }) -} -``` -Similarly, our `Title` component would be straightforward: - -```rust -#[inline_props] -fn Title(cx: Scope, text: UseState) -> Element { - cx.render(rsx!{ - h1 { "{text}" } - }) -} -``` - -For more complicated use cases, we can take advantage of the EventHandler coercion talked about before to pass in any callback. Recall that fields on components that start with "on" are automatically "upgraded" into an `EventHandler` at the call site. - -This lets us abstract over the exact type of state being used to store the data. - -For the `Input` component, we would simply add a new `oninput` field: - -```rust -#[inline_props] -fn Input<'a>(cx: Scope<'a>, oninput: EventHandler<'a, String>) -> Element { - cx.render(rsx!{ - input { oninput: move |evt| oninput.call(evt.value.clone()), } - }) -} -``` - -For our `Title` component, we could also abstract it to take any `&str`: - -```rust -#[inline_props] -fn Title<'a>(cx: Scope<'a>, text: &'a str) -> Element { - cx.render(rsx!{ - h1 { "{text}" } - }) -} -``` - -## Fanning Out - -As your app grows and grows, you might need to start pulling in global state to avoid prop drilling. This tends to solve a lot of problems, but generates even more. - -For instance, let's say we built a beautiful `Title` component. Instead of passing props in, we instead are using a `use_read` hook from Fermi. - -```rust -fn Title(cx: Scope) -> Element { - let title = use_read(&cx, TITLE); - - cx.render(rsx!{ - h1 { "{title}" } - }) -} -``` - -This is great - all is well in the world. We get precise updates, automatic memoization, and a solid abstraction. But, what happens when we want to reuse this component in another project? This component is now deeply intertwined with our global state - which might not be the same in another app. - -In this case, we want to "lift" our global state out of "view" components. With `lifting`, our individual components at "leaf" position of our VirtualDom are "pure", making them easily reusable, testable, and deterministic. - -To enable our title component to be used across apps, we want to lift our atoms upwards and out of the Title component. We would organize a bunch of other components in this section of the app to share some of the same state. - -```rust -fn DocsiteTitlesection(cx: Scope) { - // Use our global state in a wrapper component - let title = use_read(&cx, TITLE); - let subtitle = use_read(&cx, SUBTITLE); - - let username = use_read(&cx, USERNAME); - let points = use_read(&cx, POINTS); - - // and then pass our global state in from the outside - cx.render(rsx!{ - Title { title: title.clone(), subtitle: subtitle.clone() } - User { username: username.clone(), points: points.clone() } - }) -} -``` - -This particular wrapper component unfortunately cannot be reused across apps. However, because it simply wraps other real elements, it doesn't have to. We are free to reuse our TitleBar and UserBar components across apps with ease. We also know that this particular component is plenty performant because the wrapper doesn't have any props and is always memoized. The only times this component re-renders is when any of the atoms change. - -This is the beauty of Dioxus - we always know where our components are likely to be re-rendered. Our wrapper components can easily prevent any large re-renders by simply memoizing their components. This system might not be as elegant or precise as signal systems found in libraries like Sycamore or SolidJS, but it is quite ergonomic. diff --git a/docs/guide/src/state/sharedstate.md b/docs/guide/src/state/sharedstate.md deleted file mode 100644 index bf08f34de..000000000 --- a/docs/guide/src/state/sharedstate.md +++ /dev/null @@ -1,65 +0,0 @@ -# Global State - -If your app has finally gotten large enough where passing values through the tree ends up polluting the intent of your code, then it might be time to turn to global state. - -In Dioxus, global state is shared through the Context API. This guide will show you how to use the Context API to simplify state management. - -## Provide Context and Consume Context - -The simplest way of retrieving shared state in your app is through the Context API. The Context API allows you to provide and consume an item of state between two components. - -Whenever a component provides a context, it is then accessible to any child components. - -> Note: parent components cannot "reach down" and consume state from below their position in the tree. - -The terminology here is important: `provide` context means that the component will expose state and `consume` context means that the child component can acquire a handle to state above it. - -Instead of using keys or statics, Dioxus prefers the `NewType` pattern to search for parent state. This means each state you expose as a context should be its own unique type. - -In practice, you'll have a component that exposes some state: - - -```rust -#[derive(Clone)] -struct Title(String); - -fn app(cx: Scope) -> Element { - cx.use_hook(|_| { - cx.provide_context(Title("Hello".to_string())); - }); - - cx.render(rsx!{ - Child {} - }) -} -``` - -And then in our component, we can consume this state at any time: - -```rust -fn Child(cx: Scope) -> Element { - let name = cx.consume_context::(); - - // -} -``` - -Note: calling "consume" state can be a rather expensive operation to perform during each render. Prefer to consume state within a `use_hook`: - -```rust -fn Child(cx: Scope) -> Element { - // cache our "consume_context" operation - let name = cx.use_hook(|_| cx.consume_context::<Title>()); -} -``` - -All `Context` must be cloned - the item will be cloned into each call of `consume_context`. To make this operation cheaper, consider wrapping your type in an `Rc` or `Arc`. - - -<!-- ## Coroutines - -The `use_coroutine` hook --> - -<!-- # `use_context` and `use_context_provider` - -These --> diff --git a/docs/guide/src/tutorial/index.md b/docs/guide/src/tutorial/index.md deleted file mode 100644 index 875b74bcd..000000000 --- a/docs/guide/src/tutorial/index.md +++ /dev/null @@ -1,23 +0,0 @@ -# Putting it all together - -So far, we've covered the basics of Dioxus. We've talked about: - -- Elements -- Components -- Interactivity -- State Management -- Async Actions -- Styling - -In this chapter, we'll build a real-world weather app that combines everything we've learned into a cute application that you can run locally. It'll let us monitor different locations simultaneously and periodically check for updates. - -The app is running on the web [here]() but is also available: - -- as a desktop app -- a mobile app -- and as an API endpoint here - -![Weather App Image](/static/weather_app.png) - - -Let's get started! Head on to the next chapter where we create our app. diff --git a/docs/guide/src/tutorial/new_app.md b/docs/guide/src/tutorial/new_app.md deleted file mode 100644 index ba28372c3..000000000 --- a/docs/guide/src/tutorial/new_app.md +++ /dev/null @@ -1,60 +0,0 @@ -# New app - -To get started, let's create a new Rust project for our Dog Search Engine. - -```shell -$ cargo new --bin doggo -$ cd doggo -``` - -Make sure our project builds by default - -```shell -$ cargo run - - Compiling doggo v0.1.0 - Finished dev [unoptimized + debuginfo] target(s) in 0.41s - Running `target/debug/doggo` -Hello, world! -``` - -## Adding Dioxus Desktop as a dependency - -We can either edit our Cargo.toml directly: - -```toml -[dependencies] -dioxus = { version = "*", features = ["desktop"]} -``` - -or use `cargo-edit` to add it via the CLI: - -```shell -$ cargo add dioxus --features desktop -``` - -## Setting up a hello world - -Let's edit the project's `main.rs` and add the skeleton of - -```rust -use dioxus::prelude::*; - -fn main() { - dioxus::desktop::launch(app); -} - -fn app(cx: Scope) -> Element { - cx.render(rsx!( - div { "hello world!" } - )) -} -``` - - -## Making sure things run - - - - - diff --git a/docs/reference/.gitignore b/docs/reference/.gitignore deleted file mode 100644 index 25d80f5f3..000000000 --- a/docs/reference/.gitignore +++ /dev/null @@ -1 +0,0 @@ -reference diff --git a/docs/reference/book.toml b/docs/reference/book.toml deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/reference/src/README.md b/docs/reference/src/README.md deleted file mode 100644 index 6de14f333..000000000 --- a/docs/reference/src/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Dioxus: Reference and Advanced Guides - -![dioxuslogo](./images/dioxuslogo_full.png) - -**Dioxus** is a framework and ecosystem for building fast, scalable, and robust user interfaces with the Rust programming language. This guide will help you get started with Dioxus running on the Web, Desktop, Mobile, and more. - -> This book is the reference and Advanced Guides for the Dioxus framework. For a tutorial on how to actually *use* Dioxus, make sure to check out the [official guide](https://dioxuslabs.com/guide/). - - -## Reference and Guides - -With the reference, we aim to maintain documentation of functionality that might not be mentioned in the official guide to keep the information load to a minimum. Some topics not included by the guide but discussed in the reference include: - -- ThreadSafety of the VirtualDom -- Full usage of `rsx!` and included features -- Spread pattern for component properties -- Testing -- Memoization in Depth -- Custom Elements -- Custom Renderers - - -## Contributing - -If this doc is lacking in any way, is confusing, has a typo, or you'd just like to help improve things, feel free to make a PR against the [Dioxus repo](https://github.com/DioxusLabs/dioxus/tree/master/docs/reference). - -All contributions will be licensed under MIT/Apache2. diff --git a/docs/reference/src/SUMMARY.md b/docs/reference/src/SUMMARY.md deleted file mode 100644 index 9f9371b12..000000000 --- a/docs/reference/src/SUMMARY.md +++ /dev/null @@ -1,15 +0,0 @@ -# Summary - -- [Introduction](README.md) - -- [Platforms](platforms/index.md) - - [Web](platforms/web.md) - - [Server Side Rendering](platforms/ssr.md) - - [Desktop](platforms/desktop.md) - - [Mobile](platforms/mobile.md) - - [TUI](platforms/tui.md) - -- [Advanced Guides](guide/index.md) - - [RSX in Depth](guide/rsx_in_depth.md) - - [Custom Renderer](guide/custom_renderer.md) - - [Hot Reloading Rsx](guide/hot_reloading.md) \ No newline at end of file diff --git a/docs/reference/src/guide/index.md b/docs/reference/src/guide/index.md deleted file mode 100644 index 53d2cb54f..000000000 --- a/docs/reference/src/guide/index.md +++ /dev/null @@ -1 +0,0 @@ -# Advanced Guides diff --git a/docs/reference/src/guide/rsx_in_depth.md b/docs/reference/src/guide/rsx_in_depth.md deleted file mode 100644 index 8018aed60..000000000 --- a/docs/reference/src/guide/rsx_in_depth.md +++ /dev/null @@ -1,231 +0,0 @@ -# RSX in Depth - -The RSX macro makes it very easy to assemble complex UIs with a very natural Rust syntax: - - -```rust -rsx!( - div { - button { - onclick: move |e| todos.write().new_todo(), - "Add todo" - } - ul { - class: "todo-list", - todos.iter().map(|(key, todo)| rsx!( - li { - class: "beautiful-todo" - key: "f" - h3 { "{todo.title}" } - p { "{todo.contents}"} - } - )) - } - } -) -``` - -In this section, we'll cover the `rsx!` macro in depth. If you prefer to learn through examples, the `code reference` guide has plenty of examples on how to use `rsx!` effectively. - -### Element structure - -Attributes must come before child elements - -```rust -div { - hidden: "false", - "some text" - child {} - Component {} // uppercase - component() // lowercase is treated like a function call - (0..10).map(|f| rsx!{ "hi {f}" }) // arbitrary rust expressions -} -``` - -Each element takes a comma-separated list of expressions to build the node. Roughly, here's how they work: - -- `name: value` sets a property on this element. -- `"text"` adds a new text element -- `tag {}` adds a new child element -- `CustomTag {}` adds a new child component -- `{expr}` pastes the `expr` tokens literally. They must be `IntoIterator<T> where T: IntoVnode` to work properly - -Commas are entirely optional, but might be useful to delineate between elements and attributes. - -The `render` function provides an **extremely efficient** allocator for VNodes and text, so try not to use the `format!` macro in your components. Rust's default `ToString` methods pass through the global allocator, but all text in components is allocated inside a manually-managed Bump arena. To push you in the right direction, all text-based attributes take `std::fmt::Arguments` directly, so you'll want to reach for `format_args!` when the built-in `f-string` interpolation just doesn't cut it. - - -### Ignoring `cx.render` with `rsx!(cx, ...)` - -Sometimes, writing `cx.render` is a hassle. The `rsx! macro will accept any token followed by a comma as the target to call "render" on: - -```rust -cx.render(rsx!( div {} )) -// becomes -rsx!(cx, div {}) -``` - - - -### Conditional Rendering - -Sometimes, you might not want to render an element given a condition. The rsx! macro will accept any tokens directly contained with curly braces, provided they resolve to a type that implements `IntoIterator<VNode>`. This lets us write any Rust expression that resolves to a VNode: - - -```rust -rsx!({ - if enabled { - rsx!(cx, div {"enabled"}) - } else { - rsx!(cx, li {"disabled"}) - } -}) -``` -A convenient way of hiding/showing an element is returning an `Option<VNode>`. When combined with `and_then`, we can succinctly control the display state given some boolean: - -```rust -rsx!({ - a.and_then(rsx!(div {"enabled"})) -}) -``` - -It's important to note that the expression `rsx!()` is typically lazy - this expression must be _rendered_ to produce a VNode. When using match statements, we must render every arm as to avoid the `no two closures are identical` rule that Rust imposes: - -```rust -// this will not compile! -match case { - true => rsx!(div {}), - false => rsx!(div {}) -} - -// the nodes must be rendered first -match case { - true => rsx!(cx, div {}), - false => rsx!(cx, div {}) -} -``` - -### Lists - -Again, because anything that implements `IntoIterator<VNode>` is valid, we can use lists directly in our `rsx!`: - -```rust -let items = vec!["a", "b", "c"]; - -cx.render(rsx!{ - ul { - {items.iter().map(|f| rsx!(li { "a" }))} - } -}) -``` - -Sometimes, it makes sense to render VNodes into a list: - -```rust -let mut items = vec![]; - -for _ in 0..5 { - items.push(rsx!(cx, li {} )) -} - -rsx!(cx, {items} ) -``` - -#### Lists and Keys - -When rendering the VirtualDom to the screen, Dioxus needs to know which elements have been added and which have been removed. These changes are determined through a process called "diffing" - an old set of elements is compared to a new set of elements. If an element is removed, then it won't show up in the new elements, and Dioxus knows to remove it. - -However, with lists, Dioxus does not exactly know how to determine which elements have been added or removed if the order changes or if an element is added or removed from the middle of the list. - -In these cases, it is vitally important to specify a "key" alongside the element. Keys should be persistent between renders. - -```rust -fn render_list(cx: Scope, items: HashMap<String, Todo>) -> DomTree { - rsx!(cx, ul { - {items.iter().map(|key, item| { - li { - key: key, - h2 { "{todo.title}" } - p { "{todo.contents}" } - } - })} - }) -} -``` - -There have been many guides made for keys in React, so we recommend reading up to understand their importance: - -- [React guide on keys](https://reactjs.org/docs/lists-and-keys.html) -- [Importance of keys (Medium)](https://kentcdodds.com/blog/understanding-reacts-key-prop) - -### Complete Reference -```rust -let text = "example"; - -cx.render(rsx!{ - div { - h1 { "Example" }, - - {title} - - // fstring interpolation - "{text}" - - p { - // Attributes - tag: "type", - - // Anything that implements display can be an attribute - abc: 123, - - enabled: true, - - // attributes also supports interpolation - // `class` is not a restricted keyword unlike JS and ClassName - class: "big small wide short {text}", - - class: format_args!("attributes take fmt::Arguments. {}", 99), - - tag: {"these tokens are placed directly"} - - // Children - a { "abcder" }, - - // Children with attributes - h2 { "hello", class: "abc-123" }, - - // Child components - CustomComponent { a: 123, b: 456, key: "1" }, - - // Child components with paths - crate::components::CustomComponent { a: 123, b: 456, key: "1" }, - - // Iterators - { (0..3).map(|i| rsx!( h1 {"{:i}"} )) }, - - // More rsx!, or even html! - { rsx! { div { } } }, - { html! { <div> </div> } }, - - // Matching - // Requires rendering the nodes first. - // rsx! is lazy, and the underlying closures cannot have the same type - // Rendering produces the VNode type - {match rand::gen_range::<i32>(1..3) { - 1 => rsx!(cx, h1 { "big" }) - 2 => rsx!(cx, h2 { "medium" }) - _ => rsx!(cx, h3 { "small" }) - }} - - // Optionals - {true.and_then(|f| rsx!( h1 {"Conditional Rendering"} ))} - - // Child nodes - {cx.props.children} - - // Any expression that is `IntoVNode` - {expr} - } - } -}) -``` diff --git a/docs/reference/src/images/dioxuslogo_full.png b/docs/reference/src/images/dioxuslogo_full.png deleted file mode 100644 index 7d08f2af8f057780eddae4b0f8b8fa753b69e7f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59292 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 diff --git a/docs/reference/src/platforms/desktop.md b/docs/reference/src/platforms/desktop.md deleted file mode 100644 index 985fbe6d9..000000000 --- a/docs/reference/src/platforms/desktop.md +++ /dev/null @@ -1,47 +0,0 @@ -# Getting Started: Desktop - -One of Dioxus' killer features is the ability to quickly build a native desktop app that looks and feels the same across platforms. Apps built with Dioxus are typically <5mb in size and use existing system resources, so they won't hog extreme amounts of RAM or memory. - -Dioxus Desktop is built off Tauri. Right now there aren't any Dioxus abstractions over keyboard shortcuts, menubar, handling, etc, so you'll want to leverage Tauri - mostly [Wry](http://github.com/tauri-apps/wry/) and [Tao](http://github.com/tauri-apps/tao)) directly. The next major release of Dioxus-Desktop will include components and hooks for notifications, global shortcuts, menubar, etc. - - -## Getting Set up - -Getting Set up with Dioxus-Desktop is quite easy. Make sure you have Rust and Cargo installed, and then create a new project: - -```shell -$ cargo new --bin demo -$ cd demo -``` - -Add Dioxus with the `desktop` feature: - -```shell -$ cargo add dioxus --features desktop -``` - -Edit your `main.rs`: - -```rust -// main.rs -use dioxus::prelude::*; - -fn main() { - dioxus::desktop::launch(app); -} - -fn app(cx: Scope) -> Element { - cx.render(rsx!{ - div { - "hello world!" - } - }) -} -``` - - -To configure the webview, menubar, and other important desktop-specific features, checkout out some of the launch configuration in the [API reference](https://docs.rs/dioxus-desktop/). - -## Future Steps - -Make sure to read the [Dioxus Guide](https://dioxuslabs.com/guide) if you already haven't! diff --git a/docs/reference/src/platforms/index.md b/docs/reference/src/platforms/index.md deleted file mode 100644 index fbbabd35d..000000000 --- a/docs/reference/src/platforms/index.md +++ /dev/null @@ -1,10 +0,0 @@ -# Platforms - -Dioxus supports many different platforms. Below are a list of guides that walk you through setting up Dioxus for a specific platform. - -### Setup Guides -- [Web](web.md) -- [Server Side Rendering](ssr.md) -- [Desktop](desktop.md) -- [Mobile](mobile.md) -- [TUI](tui.md) \ No newline at end of file diff --git a/docs/reference/src/platforms/tui.md b/docs/reference/src/platforms/tui.md deleted file mode 100644 index f8c97fa04..000000000 --- a/docs/reference/src/platforms/tui.md +++ /dev/null @@ -1,98 +0,0 @@ -# Getting Started: TUI - -TUI support is currently quite experimental. Even the project name will change. But, if you're willing to venture into the realm of the unknown, this guide will get you started. - - -[TUI Support](https://github.com/DioxusLabs/rink/raw/master/examples/example.png) - - -## Getting Set up - - -To tinker with TUI support, start by making a new package and adding our TUI feature. - -```shell -$ cargo new --bin demo -$ cd demo -$ cargo add dioxus --features tui -``` - - - -Then, edit your `main.rs` with the basic template. - -```rust -// main -use dioxus::prelude::*; - -fn main() { - dioxus::tui::launch(app); -} - -fn app(cx: Scope) -> Element { - cx.render(rsx! { - div { - width: "100%", - height: "10px", - background_color: "red", - justify_content: "center", - align_items: "center", - - "Hello world!" - } - }) -} -``` - -To run our app: - -```shell -$ cargo run -``` - -Press "ctrl-c" to close the app. To switch from "ctrl-c" to just "q" to quit you can launch the app with a configuration to disable the default quit and use the root TuiContext to quit on your own. - -```rust -use dioxus::events::{KeyCode, KeyboardEvent}; -use dioxus::prelude::*; -use dioxus::tui::TuiContext; - -fn main() { - dioxus::tui::launch_cfg( - app, - dioxus::tui::Config::new() - .without_ctrl_c_quit() - // Some older terminals only support 16 colors or ANSI colors if your terminal is one of these change this to BaseColors or ANSI - .with_rendering_mode(dioxus::tui::RenderingMode::Rgb), - ); -} - -fn app(cx: Scope) -> Element { - let tui_ctx: TuiContext = cx.consume_context().unwrap(); - - cx.render(rsx! { - div { - width: "100%", - height: "10px", - background_color: "red", - justify_content: "center", - align_items: "center", - onkeydown: move |k: KeyboardEvent| if let KeyCode::Q = k.data.key_code { - tui_ctx.quit(); - }, - - "Hello world!" - } - }) -} -``` - -## Notes - -- Our TUI package uses flexbox for layout -- 1px is one character lineheight. Your regular CSS px does not translate. -- If your app panics, your terminal is wrecked. This will be fixed eventually. - -## Future Steps - -Make sure to read the [Dioxus Guide](https://dioxuslabs.com/guide) if you already haven't! diff --git a/docs/reference/src/platforms/web.md b/docs/reference/src/platforms/web.md deleted file mode 100644 index ab5d6505b..000000000 --- a/docs/reference/src/platforms/web.md +++ /dev/null @@ -1,111 +0,0 @@ -# Getting Started: Web - -[*"Pack your things, we're going on an adventure!"*](https://trunkrs.dev) - -Dioxus is well supported for the web through WebAssembly. A build of Dioxus for the web will be roughly equivalent to the size of a React build (70kb vs 65kb), but will load significantly faster due to [WebAssembly's StreamingCompile](https://hacks.mozilla.org/2018/01/making-webassembly-even-faster-firefoxs-new-streaming-and-tiering-compiler/) option. - -Building Dioxus apps for the web requires much less configuration than our JavaScript counterparts. - -## Tooling - -To develop your Dioxus app for the web, you'll need a tool to build and serve your assets. We recommend using [trunk](https://trunkrs.dev) which includes a build system, Wasm optimization, a dev server, and support for SASS/CSS. - -Currently, trunk projects can only build the root binary (ie the `main.rs`). To build a new Dioxus compatible project, this should get you up and running. - -First, [install trunk](https://trunkrs.dev/#install): -```shell -$ cargo install trunk -``` - -Make sure the `wasm32-unknown-unknown` target is installed: -```shell -$ rustup target add wasm32-unknown-unknown -``` - -Create a new project: - -```shell -$ cargo new --bin demo -$ cd demo -``` - -Add Dioxus with the `web` features: - -``` -$ cargo add dioxus --features web -``` - -Add an `index.html` for Trunk to use. Make sure your "mount point" element has an ID of "main" (this can be configured later): - -```html -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - </head> - <body> - <div id="main"> </div> - </body> -</html> -``` - -Edit your `main.rs`: -```rust -// main.rs - -use dioxus::prelude::*; - -fn main() { - dioxus::web::launch(app); -} - -fn app(cx: Scope) -> Element { - cx.render(rsx!{ - div { "hello, wasm!" } - }) -} -``` - - -And to serve our app: - -```shell -trunk serve -``` - -To build our app and publish it to Github: - -- Make sure Github Pages is set up for your repo -- Build your app with `trunk build --release` (include `--public-url <repo-name>` to update asset prefixes if using a project site) -- Move your generated HTML/CSS/JS/Wasm from `dist` into the folder configured for Github Pages -- Add and commit with git -- Push to Github - -That's it! - -## Future Build Tool - -We are currently working on our own build tool called [Dioxus Studio](http://github.com/dioxusLabs/studio) which will support: -- an interactive TUI -- on-the-fly reconfiguration -- hot CSS reloading -- two-way data binding between browser and source code -- an interpreter for `rsx!` -- ability to publish to github/netlify/vercel -- bundling for iOS/Desktop/etc - -## Features - -Currently, the web supports: - -- Pre-rendering/Hydration - -## Events - -The regular events in the `html` crate work just fine in the web. - - -## Future Steps - -Make sure to read the [Dioxus Guide](https://dioxuslabs.com/guide) if you already haven't! diff --git a/examples/core_reference/antipatterns.rs b/examples/core_reference/antipatterns.rs deleted file mode 100644 index 5814e7096..000000000 --- a/examples/core_reference/antipatterns.rs +++ /dev/null @@ -1,185 +0,0 @@ -//! Example: Antipatterns -//! --------------------- -//! -//! This example shows what *not* to do and provides a reason why a given pattern is considered an "AntiPattern". Most -//! anti-patterns are considered wrong due performance reasons or violate the "rules" of Dioxus. These rules are -//! borrowed from other successful UI frameworks, and Dioxus is more focused on providing a familiar, ergonomic interface -//! rather than building new harder-to-misuse patterns. -//! -//! In this list we showcase: -//! - Not adding keys for iterators -//! - Heavily nested fragments -//! - Understanding ordering of set_state -//! - Naming conventions -//! - Rules of hooks -//! -//! Feel free to file a PR or Issue if you run into another antipattern that you think users of Dioxus should know about. -use dioxus::prelude::*; - -/// Antipattern: Iterators without keys -/// ----------------------------------- -/// -/// This is considered an anti-pattern for performance reasons. Dioxus will diff your current and old layout and must -/// take a slower path if it can't correlate old elements with new elements. Lists are particularly susceptible to the -/// "slow" path, so you're strongly encouraged to provide a unique, stable ID between renders. Additionally, providing -/// the *wrong* keys is even worse - props might be assigned to the wrong components! Keys should be: -/// - Unique -/// - Stable -/// - Predictable -/// -/// Dioxus will log an error in the console if it detects that your iterator does not properly generate keys -#[derive(PartialEq, Props)] -struct NoKeysProps { - data: std::collections::HashMap<u32, String>, -} -fn AntipatternNoKeys(cx: Scope<NoKeysProps>) -> Element { - // WRONG: Make sure to add keys! - cx.render(rsx! { - ul { - cx.props.data.iter().map(|(k, v)| rsx!(li { "List item: {v}" })) - } - }); - // RIGHT: Like this: - cx.render(rsx! { - ul { - cx.props.data.iter().map(|(k, v)| rsx!(li { key: "{k}", "List item: {v}" })) - } - }) -} - -/// Antipattern: Deeply nested fragments -/// ------------------------------------ -/// -/// This particular antipattern is not necessarily an antipattern in other frameworks but does has a performance impact -/// in Dioxus apps. Fragments don't mount a physical element to the DOM immediately, so Dioxus must recurse into its -/// children to find a physical DOM node. This process is called "normalization". Other frameworks perform an agressive -/// mutative normalization while Dioxus keeps your VNodes immutable. This means that deeply nested fragments make Dioxus -/// perform unnecessary work. Prefer one or two levels of fragments / nested components until presenting a true DOM element. -/// -/// Only Component and Fragment nodes are susceptible to this issue. Dioxus mitigates this with components by providing -/// an API for registering shared state without the ContextProvider pattern. -fn AntipatternNestedFragments(cx: Scope<()>) -> Element { - // Try to avoid heavily nesting fragments - cx.render(rsx!( - Fragment { - Fragment { - Fragment { - Fragment { - Fragment { - div { "Finally have a real node!" } - } - } - } - } - } - )) -} - -/// Antipattern: Using state after it's been updated -/// ----------------------------------------------- -/// -/// This is an antipattern in other frameworks, but less so in Dioxus. However, it's important to highlight that use_state -/// does *not* work the same way as it does in React. Rust provides explicit guards against mutating shared data - a huge -/// problem in JavaScript land. With Rust and Dioxus, it's nearly impossible to misuse `use_state` - you simply can't -/// accidentally modify the state you've received! -/// -/// However, calling set_state will *not* update the current version of state in the component. This should be easy to -/// 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. -fn AntipatternRelyingOnSetState(cx: Scope) -> Element { - let (state, set_state) = use_state(&cx, || "Hello world").classic(); - set_state("New state"); - // This will return false! `state` will *still* be "Hello world" - assert!(state == &"New state"); - todo!() -} - -/// Antipattern: Capitalization -/// --------------------------- -/// -/// This antipattern is enforced to retain parity with other frameworks and provide useful IDE feedback, but is less -/// critical than other potential misuses. In short: -/// - Only raw elements may start with a lowercase character -/// - All components must start with an uppercase character -/// -/// i.e.: the following component will be rejected when attempted to be used in the rsx! macro -static antipattern_component: Component = |cx| todo!(); - -/// Antipattern: Misusing hooks -/// --------------------------- -/// -/// This pattern is an unfortunate one where Dioxus replicates the same behavior as other frameworks. Dioxus supports -/// "hooks" - i.e. "memory cells" that allow a value to be stored between renders. This allows other hooks to tap into -/// a component's "memory" without explicitly adding all of its data to a struct definition. In Dioxus, hooks are allocated -/// with a bump arena and then immediately sealed. -/// -/// This means that hooks may not be misused: -/// - Called out of order -/// - Called in a conditional -/// - Called in loops or callbacks -/// -/// For the most part, Rust helps with rule #3 but does not save you from misusing rule #1 or #2. Dioxus will panic -/// if hooks do not downcast to the same data between renders. This is validated by TypeId and, eventually, a custom key. -#[derive(PartialEq, Props)] -struct MisuedHooksProps { - should_render_state: bool, -} -fn AntipatternMisusedHooks(cx: Scope<MisuedHooksProps>) -> Element { - if props.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(&cx, || "hello world").classic(); - cx.render(rsx!(div { "{state}" })) - } else { - cx.render(rsx!(div { "Not rendering state" })) - } -} - -/// Antipattern: Downcasting refs and panicking -/// ------------------------------------------ -/// -/// Occasionally it's useful to get the ref of an element to handle it directly. Elements support downcasting to -/// Dioxus' virtual element types as well as their true native counterparts. Downcasting to Dioxus' virtual elements -/// will never panic, but downcasting to native elements will fail if on an unsupported platform. We recommend avoiding -/// publishing hooks and components that deeply rely on controlling elements using their native `ref`, preferring to -/// use their Dioxus Virtual Element counterpart instead. -/// This particular code *will panic* due to the unwrap. Try to avoid these types of patterns. -/// --------------------------------- -/// TODO: Get this to compile properly -/// let div_ref = use_node_ref(&cx); -/// -/// cx.render(rsx!{ -/// div { ref: div_ref, class: "custom class", -/// button { "click me to see my parent's class" -/// onclick: move |_| if let Some(div_ref) = div_ref { -/// panic!("Div class is {}", div_ref.to_native::<web_sys::Element>().unwrap().class()) -/// } -/// } -/// } -/// }) -static _example: Component = |cx| todo!(); - -/// Antipattern: publishing components and hooks with all features enabled -/// ---------------------------------------------------------------------- -/// -/// The `dioxus` crate combines a bunch of useful utilities together (like the rsx! and html! macros, hooks, and more). -/// However, when publishing your custom hook or component, we highly advise using only the `core` feature on the dioxus -/// crate. This makes your crate compile faster, makes it more stable, and avoids bringing in incompatible libraries that -/// might make it not compile on unsupported platforms. -/// -/// We don't have a code snippet for this, but just prefer to use this line: -/// dioxus = { version = "*", features = ["core"]} -/// instead of this one: -/// dioxus = { version = "*", features = ["web", "desktop", "full"]} -/// in your Cargo.toml -/// -/// This will only include the `core` dioxus crate which is relatively slim and fast to compile and avoids target-specific -/// libraries. -static __example: Component = |cx| todo!(); - -fn Example(cx: Scope) -> Element { - cx.render(rsx! { - AntipatternNoKeys { data: std::collections::HashMap::new() } - AntipatternNestedFragments {} - }) -} diff --git a/examples/core_reference/basics.rs b/examples/core_reference/basics.rs deleted file mode 100644 index 4c076a3a2..000000000 --- a/examples/core_reference/basics.rs +++ /dev/null @@ -1,38 +0,0 @@ -//! Example: The basics of Dioxus -//! ---------------------------- -//! -//! This small example covers some of the basics of Dioxus including -//! - Components -//! - Props -//! - Children -//! - the rsx! macro - -use dioxus::prelude::*; - -pub fn Example(cx: Scope) -> Element { - cx.render(rsx! { - div { - Greeting { - name: "Dioxus" - div { "Dioxus is a fun, fast, and portable UI framework for Rust" } - } - } - }) -} - -#[derive(PartialEq, Props)] -struct GreetingProps<'a> { - name: &'static str, - children: Element<'a>, -} - -pub fn Greeting<'a>(cx: Scope<'a, GreetingProps<'a>>) -> Element { - cx.render(rsx! { - div { - h1 { "Hello, {cx.props.name}!" } - p { "Welcome to the Dioxus framework" } - br {} - &cx.props.children - } - }) -} diff --git a/examples/core_reference/children.rs b/examples/core_reference/children.rs deleted file mode 100644 index 1a1bee316..000000000 --- a/examples/core_reference/children.rs +++ /dev/null @@ -1,47 +0,0 @@ -//! Example: Children -//! ----------------- -//! -//! Dioxus supports passing children in from the parent. These children are allocated in the parent and just passed -//! into the child. Components that pass in children may not be safely memoized, though in practice it's rare for a -//! change in a parent to not result in a different set of children. -//! -//! In Dioxus, children can *only be a list*. Unlike React, you cannot pass in functions or arbitrary data. This is -//! partially a limitation of having static types, but is rather intentional to encourage the use of attributes where -//! arbitrary child data might normally be used. Check out the `function driven children` example for how to adopt your -//! React pattern to Dioxus' semantics. -//! -//! Dioxus will let you use the `children` method more than once - and it's semantically *okay* - but you'll likely -//! ruin your page if you try to clone elements in this way. Under the hood, Dioxus shares a "mounted ID" for each node, -//! and mounting the same VNode in two places will overwrite the first mounted ID. This will likely lead to dead elements. -//! -//! In the future, this might become a runtime error, so consider it an error today. - -use dioxus::prelude::*; - -fn Example(cx: Scope) -> Element { - cx.render(rsx! { - div { - Banner { - p { "Some Content1" } - } - Banner { - p { "Some Content2" } - } - } - }) -} - -#[derive(Props)] -struct BannerProps<'a> { - children: Element<'a>, -} - -fn Banner<'a>(cx: Scope<'a, BannerProps<'a>>) -> Element<'a> { - cx.render(rsx! { - div { - h1 { "This is a great banner!" } - div { class: "content", &cx.props.children } - footer { "Wow, what a great footer" } - } - }) -} diff --git a/examples/core_reference/conditional_rendering.rs b/examples/core_reference/conditional_rendering.rs deleted file mode 100644 index 8b7f4baaa..000000000 --- a/examples/core_reference/conditional_rendering.rs +++ /dev/null @@ -1,114 +0,0 @@ -//! Example: Conditional Rendering -//! ------------------------------ -//! -//! This example shows how to hide or show elements using conditional rendering. -//! -//! Oftentimes you might want to display a different UI given some sort of condition. This is called "conditional rendering". -//! In Dioxus, you can perform conditional rendering with optionals or matching. -//! -//! The rsx! and html! macros accepts anything that is `IntoIter<Item = impl IntoVnode>`. Options and Results both implement -//! IntoIter for impl VNode, so you can use option/result for conditional rendering. - -use dioxus::prelude::*; - -// Convert a boolean conditional into a hide/show -#[derive(PartialEq, Props)] -pub struct MyProps { - should_show: bool, -} -pub fn Example0(cx: Scope<MyProps>) -> Element { - cx.render(rsx! { - div { - cx.props.should_show.then(|| rsx!{ - h1 { "showing the title!" } - }) - } - }) -} - -// Convert a boolean conditional into an either/or -// Because rsx! is lazy (produces a closure), we cannot use it in two branch arms. To use it in matching/branching, we -// must render it. -// -// Dioxus will let you render any `LazyNodes` into a `VNode` with `cx.render`. `rsx!` also supports the `in cx` syntax -// which will do essentially the same thing as `cx.render`. -// -// In short: -// `rsx!(cx, ...)` is shorthand for `cx.render(rsx!(...))` -#[derive(PartialEq, Props)] -pub struct MyProps1 { - should_show: bool, -} -pub fn Example1(cx: Scope<MyProps1>) -> Element { - cx.render(rsx! { - div { - // With matching - match props.should_show { - true => cx.render(rsx!(div {"it is true!"})), - false => rsx!(cx, div {"it is false!"}), - }, - - // or with just regular conditions - if props.should_show { - rsx!(cx, div {"it is true!"}) - } else { - rsx!(cx, div {"it is false!"}) - }, - - // or with optional chaining - props.should_show - .then(|| rsx!(cx, div {"it is true!"})) - .unwrap_or_else(|| rsx!(cx, div {"it is false!"})) - } - }) -} - -/// Matching can be expanded - -#[derive(PartialEq)] -pub enum Color { - Green, - Yellow, - Red, -} -#[derive(PartialEq, Props)] -pub struct MyProps2 { - color: Color, -} -pub fn Example2(cx: Scope<MyProps2>) -> Element { - cx.render(rsx! { - div { - match props.color { - Color::Green => rsx!(cx, div {"it is Green!"}), - Color::Yellow => rsx!(cx, div {"it is Yellow!"}), - Color::Red => rsx!(cx, div {"it is Red!"}), - } - } - }) -} - -pub fn Example(cx: Scope<()>) -> Element { - let should_show = use_state(&cx, || false); - let mut color_index = use_state(&cx, || 0); - let color = match *color_index % 2 { - 2 => Color::Green, - 1 => Color::Yellow, - _ => Color::Red, - }; - - cx.render(rsx! { - div { - button { - onclick: move |_| should_show.set(!*should_show), - "click to toggle showing the examples" - } - button { - onclick: move |_| color_index += 1, - "click to for the enxt color" - } - Example0 { should_show: *should_show } - Example1 { should_show: *should_show } - Example2 { color: color } - } - }) -} diff --git a/examples/core_reference/controlled_inputs.rs b/examples/core_reference/controlled_inputs.rs deleted file mode 100644 index 8f3292e22..000000000 --- a/examples/core_reference/controlled_inputs.rs +++ /dev/null @@ -1,37 +0,0 @@ -use dioxus::prelude::*; -fn main() {} - -pub fn Example(cx: Scope) -> Element { - cx.render(rsx! { - div { - - } - }) -} - -// A controlled component: -pub fn ControlledSelect(cx: Scope) -> Element { - let value = use_state(&cx, || String::from("Grapefruit")); - cx.render(rsx! { - select { value: "{value}", onchange: move |evt| value.set(evt.value()), - option { value: "Grapefruit", "Grapefruit"} - option { value: "Lime", "Lime"} - option { value: "Coconut", "Coconut"} - option { value: "Mango", "Mango"} - } - }) -} - -// TODO - how do uncontrolled things work? -pub fn UncontrolledSelect(cx: Scope) -> Element { - let value = use_state(&cx, || String::new()); - - cx.render(rsx! { - select { - option { value: "Grapefruit", "Grapefruit"} - option { value: "Lime", "Lime"} - option { value: "Coconut", "Coconut"} - option { value: "Mango", "Mango"} - } - }) -} diff --git a/examples/core_reference/empty.rs b/examples/core_reference/empty.rs deleted file mode 100644 index e773901e9..000000000 --- a/examples/core_reference/empty.rs +++ /dev/null @@ -1,10 +0,0 @@ -//! Example: Null/None Children -//! --------------------------- -//! -//! This is a simple pattern that allows you to return no elements! - -use dioxus::prelude::*; - -pub fn Example(cx: Scope) -> Element { - None -} diff --git a/examples/core_reference/fragments.rs b/examples/core_reference/fragments.rs deleted file mode 100644 index 85523de31..000000000 --- a/examples/core_reference/fragments.rs +++ /dev/null @@ -1,51 +0,0 @@ -//! Example: Fragments -//! ------------------ -//! -//! Dioxus can return multiple elements without a container through the use of the VNode called a "Fragment". Fragments do not -//! have a mounted root and are inserted inline with their siblings. There are three ways of creating fragments as outlined -//! in the examples below: -//! - By returning multiple elements in Rsx! -//! - By using the `Fragment` component -//! - By using the fragment() method on the node factory - -use dioxus::prelude::*; - -pub fn Example(cx: Scope) -> Element { - cx.render(rsx! { - App1 {} - App2 {} - App3 {} - }) -} - -// Returning multiple elements with rsx! or html! -pub fn App1(cx: Scope) -> Element { - cx.render(rsx! { - h1 { } - h2 { } - h3 { } - }) -} - -// Using the Fragment component -pub fn App2(cx: Scope) -> Element { - cx.render(rsx! { - Fragment { - div {} - div {} - "asd" - } - }) -} - -// Using the `fragment` method on the NodeFactory -pub fn App3(cx: Scope) -> Element { - cx.render(LazyNodes::new(move |fac| { - fac.fragment_from_iter([ - fac.text(format_args!("A")), - fac.text(format_args!("B")), - fac.text(format_args!("A")), - fac.text(format_args!("B")), - ]) - })) -} diff --git a/examples/core_reference/iterators.rs b/examples/core_reference/iterators.rs deleted file mode 100644 index 12922344d..000000000 --- a/examples/core_reference/iterators.rs +++ /dev/null @@ -1,34 +0,0 @@ -//! Example: Iterators -//! ------------------ -//! -//! This example demonstrates how to use iterators with Dioxus. -//! Iterators must be used through the curly braces item in element bodies. -//! While you might be inclined to `.collect::<>` into Html, Dioxus prefers you provide an iterator that -//! resolves to VNodes. It's more efficient and easier to write than having to `collect` everywhere. -//! -//! This also makes it easy to write "pull"-style iterators that don't have a known size. -//! -//! However, when the size of an iterator needs to be known for display purposes, collecting is fine. - -use dioxus::prelude::*; - -pub static Example: Component = |cx| { - let example_data = use_state(&cx, || 0); - - cx.render(rsx! { - h3 {"Selected: {example_data}"} - ul { - (0..10).map(|f| rsx! { - li { - onclick: move |_| example_data.set(f), - "ID: {f}" - ul { - (0..10).map(|k| rsx!{ - li { "Sub iterator: {f}.{k}" } - }) - } - } - }) - } - }) -}; diff --git a/examples/core_reference/listener.rs b/examples/core_reference/listener.rs deleted file mode 100644 index 38e8cf090..000000000 --- a/examples/core_reference/listener.rs +++ /dev/null @@ -1,55 +0,0 @@ -//! Example: Listeners -//! ------------------ -//! -//! This example demonstrates the various ways listeners may be used in Dioxus. -//! Listeners may be at most `FnMut` - but not `FnOnce`. -//! Listeners may borrow the lifetime of cx (children and hooks), but not of local (stack) data. - -use dioxus::prelude::*; - -pub fn Example(cx: Scope) -> Element { - cx.render(rsx! { - ButtonList {} - NonUpdatingEvents {} - DisablePropagation {} - }) -} - -/// We can use `set_name` in multiple closures; the closures automatically *copy* the reference to set_name. -pub fn ButtonList(cx: Scope) -> Element { - let name = use_state(&cx, || "...?"); - - cx.render(rsx!( - div { - h1 { "Hello, {name}" } - - ["jack", "jill", "john", "jane"] - .iter() - .map(move |n| rsx!(button { onclick: move |_| name.set(n), "{n}" })) - } - )) -} - -/// This shows how listeners may be without a visible change in the display. -/// Check the console. -pub fn NonUpdatingEvents(cx: Scope) -> Element { - cx.render(rsx! { - div { - button { - onclick: move |_| log::trace!("Did not cause any updates!"), - "Click me to log!" - } - } - }) -} - -pub fn DisablePropagation(cx: Scope) -> Element { - cx.render(rsx! { - div { - onclick: move |_| log::trace!("event propagated to the div!") - button { - onclick: move |evt| log::trace!("Button will allow propagation"), - } - } - }) -}

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