Fullstack
This guide assumes you read the Web getting started guide and installed the Dioxus-cli
Getting Started
Setup
For this guide, we're going to show how to use Dioxus with Axum, but dioxus-fullstack also integrates with the Warp and Salvo web frameworks.
Make sure you have Rust and Cargo installed, and then create a new project:
cargo new --bin demo
cd demoAdd dioxus and dioxus-fullstack as dependencies:
cargo add dioxus
cargo add dioxus-fullstackNext, set up features for the server ( ssr) and the client ( web):
[features]
default = []
ssr = ["dioxus-fullstack/axum"]
web = ["dioxus-fullstack/web"]Your dependencies should look roughly like this:
[dependencies]
dioxus = { version = "*" }
dioxus-fullstack = { version = "*" }
[features]
default = []
ssr = ["dioxus-fullstack/axum"]
web = ["dioxus-fullstack/web"]Now, set up your Axum app to serve the Dioxus app.
src/server_basic.rs
#![allow(non_snake_case, unused)]
use dioxus::prelude::*;
use dioxus_fullstack::prelude::*;
fn main() {
LaunchBuilder::new(app).launch();
}
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!" }
})
}Now, run your app with:
dx build --features web --release
cargo run --features ssr --releaseFinally, open http://localhost:8080 in your browser. You should see a server-side rendered page with a counter.
Hot Reload
- Hot reloading allows much faster iteration times inside of rsx calls by interpreting them and streaming the edits.
- It is useful when changing the styling/layout of a program, but will not help with changing the logic of a program.
Usage
- Run:
dx build --features web
dx serve --features ssr --hot-reload --platform desktop- Change some code within a rsx or render macro
- Save and watch the style change without recompiling
Limitations
- The interpreter can only use expressions that existed on the last full recompile. If you introduce a new variable or expression to the rsx call, it will require a full recompile to capture the expression.
- Components, Iterators, and some attributes can contain arbitrary rust code and will trigger a full recompile when changed.