From a42711a324215b87f607093a57b204be4154f30e Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 27 Oct 2021 14:54:49 -0400 Subject: [PATCH] wip: docs --- docs/src/hello_world.md | 62 +++++++++++++++------------------ docs/src/images/helloworld.png | Bin 0 -> 31650 bytes examples/hello_world.rs | 11 ++++++ packages/desktop/src/cfg.rs | 5 +-- packages/desktop/src/lib.rs | 1 + 5 files changed, 43 insertions(+), 36 deletions(-) create mode 100644 docs/src/images/helloworld.png create mode 100644 examples/hello_world.rs diff --git a/docs/src/hello_world.md b/docs/src/hello_world.md index b06027ea2..a2274eea6 100644 --- a/docs/src/hello_world.md +++ b/docs/src/hello_world.md @@ -4,6 +4,8 @@ Let's put together a simple "hello world" to get acquainted with Dioxus. The Dio This demo will build a simple desktop app. Check out the platform-specific setup guides on how to port your app to different targets. +### 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 @@ -65,6 +67,8 @@ edition = "2018" ``` +### 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 @@ -75,24 +79,30 @@ It's very important to add `dioxus` with the `desktop` feature for this example. 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 diouxs::prelude::*; +use dioxus::prelude::*; fn main() { dioxus::desktop::start(App, |c| c); } -static App: FC<()> = |(cx, props)| { +fn App(cx: Component<()>) -> Element { cx.render(rsx! ( div { "Hello, world!" } )) -}; +} ``` -Let's dissect our example a bit. +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 This bit of code imports everything from the the `prelude` module. This brings into scope the right traits, types, and macros needed for working with Dioxus. @@ -111,45 +121,29 @@ fn main() { Finally, our app. Every component in Dioxus is a function that takes in `Context` and `Props` and returns an `Option`. ```rust -static App: FC<()> = |(cx, props)| { - cx.render(rsx! { - div { "Hello, world!" } - }) -}; -``` - -The closure `FC<()>` syntax is identical to the function syntax, but with lifetimes managed for you. In cases where props need to borrow from their parent, you will need to specify lifetimes using the function syntax: - -```rust -fn App<'a>(cx: Context<'a>, props: &'a ()) -> DomTree<'a> { +fn App(cx: Component<()>) -> DomTree { cx.render(rsx! { div { "Hello, world!" } }) } ``` +The closure `FC<()>` syntax is identical to the function syntax, but with lifetimes managed for you. In cases where props need to borrow from their parent, you will need to specify lifetimes using the function syntax: + +```rust +fn App<'a>(cx: Component<'a, ()>) -> DomTree<'a> { + cx.render(rsx! { + div { "Hello, world!" } + }) +} +``` + +### The `Context` object In React, you'll save 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 `Context` object to control how the component renders and stores data. +### The `rsx!` macro + Next, we're greeted with the `rsx!` macro. This lets us add a custom DSL for declaratively building the structure of our app. The semantics of this macro are similar to that of JSX and HTML, though with a familiar Rust-y interface. The `html!` macro is also available for writing components with a JSX/HTML syntax. The `rsx!` macro is lazy: it does not immediately produce elements or allocates, but rather builds a closure which can be rendered with `cx.render`. - -Now, let's launch our app: - -```shell -$ cargo run -``` - -Huzzah! We have a simple app. - -![Hello world](images/01-setup-helloworld.png) - -If we wanted to golf a bit, we can shrink our hello-world even smaller: - -```rust -fn main() { - static App: FC<()> = |(cx, props)| rsx!(cx, div {"hello world!"}); - dioxus::web::start(App, |c| c); -} -``` diff --git a/docs/src/images/helloworld.png b/docs/src/images/helloworld.png new file mode 100644 index 0000000000000000000000000000000000000000..c10ebdf46ee879f8f50994ce3918c1038ec40cba GIT binary patch literal 31650 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 C`XB@V literal 0 HcmV?d00001 diff --git a/examples/hello_world.rs b/examples/hello_world.rs new file mode 100644 index 000000000..db9e22899 --- /dev/null +++ b/examples/hello_world.rs @@ -0,0 +1,11 @@ +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(App, |c| c); +} + +fn App((cx, props): Component<()>) -> DomTree { + cx.render(rsx! ( + div { "Hello, world!" } + )) +} diff --git a/packages/desktop/src/cfg.rs b/packages/desktop/src/cfg.rs index 0bfdbab36..9b74a048a 100644 --- a/packages/desktop/src/cfg.rs +++ b/packages/desktop/src/cfg.rs @@ -22,9 +22,10 @@ impl<'a> DesktopConfig<'a> { /// Initializes a new `WindowBuilder` with default values. #[inline] pub fn new() -> Self { + let mut window = WindowBuilder::new().with_title("Dioxus app"); Self { event_handler: None, - window: Default::default(), + window, pre_rendered: None, manual_edits: None, } @@ -43,7 +44,7 @@ impl<'a> DesktopConfig<'a> { pub fn with_window(&mut self, f: impl FnOnce(WindowBuilder) -> WindowBuilder) -> &mut Self { // gots to do a swap because the window builder only takes itself as muy self // I wish more people knew about returning &mut Self - let mut builder = WindowBuilder::default(); + let mut builder = WindowBuilder::default().with_title("Dioxus App"); std::mem::swap(&mut self.window, &mut builder); builder = f(builder); std::mem::swap(&mut self.window, &mut builder); diff --git a/packages/desktop/src/lib.rs b/packages/desktop/src/lib.rs index f64ac82b0..3f521c9ab 100644 --- a/packages/desktop/src/lib.rs +++ b/packages/desktop/src/lib.rs @@ -130,6 +130,7 @@ pub fn run( let window = WindowBuilder::new() .with_menu(menu_bar_menu) + .with_title("Dioxus App") .build(event_loop) .unwrap(); let window_id = window.id();