//! Run with: //! //! ```sh //! dioxus build --features web //! cargo run --features ssr //! ``` #![allow(non_snake_case)] use dioxus::prelude::*; use dioxus_server::prelude::*; fn main() { #[cfg(feature = "web")] dioxus_web::launch_cfg(app, dioxus_web::Config::new().hydrate(true)); #[cfg(feature = "ssr")] { PostServerData::register().unwrap(); GetServerData::register().unwrap(); tokio::runtime::Runtime::new() .unwrap() .block_on(async move { let addr = std::net::SocketAddr::from(([127, 0, 0, 1], 8080)); axum::Server::bind(&addr) .serve( axum::Router::new() .serve_dioxus_application( ServeConfig::new(app, ()).head(r#"Hello World!"#), None, ) .with_state(SSRState::default()) .into_make_service(), ) .await .unwrap(); }); } } fn app(cx: Scope) -> Element { let mut count = use_state(cx, || 0); let text = use_state(cx, || "...".to_string()); cx.render(rsx! { h1 { "High-Five counter: {count}" } button { onclick: move |_| count += 1, "Up high!" } button { onclick: move |_| count -= 1, "Down low!" } button { onclick: move |_| { to_owned![text]; async move { if let Ok(data) = get_server_data().await { println!("Client received: {}", data); text.set(data.clone()); post_server_data(data).await.unwrap(); } } }, "Run a server function" } "Server said: {text}" }) } #[server(PostServerData)] async fn post_server_data(data: String) -> Result<(), ServerFnError> { println!("Server received: {}", data); Ok(()) } #[server(GetServerData)] async fn get_server_data() -> Result { Ok("Hello from the server!".to_string()) }