1
0

main.rs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //! Run with:
  2. //!
  3. //! ```sh
  4. //! dx serve --platform fullstack
  5. //! ```
  6. use dioxus::prelude::*;
  7. fn main() {
  8. LaunchBuilder::fullstack()
  9. .with_cfg(server_only!(ServeConfig::builder().incremental(
  10. IncrementalRendererConfig::default()
  11. .invalidate_after(std::time::Duration::from_secs(120)),
  12. )))
  13. .launch(app);
  14. }
  15. fn app() -> Element {
  16. rsx! { Router::<Route> {} }
  17. }
  18. #[derive(Clone, Routable, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
  19. enum Route {
  20. #[route("/")]
  21. Home {},
  22. #[route("/blog/:id")]
  23. Blog { id: i32 },
  24. }
  25. #[component]
  26. fn Blog(id: i32) -> Element {
  27. rsx! {
  28. Link { to: Route::Home {}, "Go to counter" }
  29. table {
  30. tbody {
  31. for _ in 0..id {
  32. tr {
  33. for _ in 0..id {
  34. td { "hello world!" }
  35. }
  36. }
  37. }
  38. }
  39. }
  40. }
  41. }
  42. #[component]
  43. fn Home() -> Element {
  44. let mut count = use_signal(|| 0);
  45. let mut text = use_signal(|| "...".to_string());
  46. rsx! {
  47. Link { to: Route::Blog { id: count() }, "Go to blog" }
  48. div {
  49. h1 { "High-Five counter: {count}" }
  50. button { onclick: move |_| count += 1, "Up high!" }
  51. button { onclick: move |_| count -= 1, "Down low!" }
  52. button {
  53. onclick: move |_| async move {
  54. if let Ok(data) = get_server_data().await {
  55. println!("Client received: {}", data);
  56. text.set(data.clone());
  57. post_server_data(data).await.unwrap();
  58. }
  59. },
  60. "Run server function!"
  61. }
  62. "Server said: {text}"
  63. }
  64. }
  65. }
  66. #[server(PostServerData)]
  67. async fn post_server_data(data: String) -> Result<(), ServerFnError> {
  68. println!("Server received: {}", data);
  69. Ok(())
  70. }
  71. #[server(GetServerData)]
  72. async fn get_server_data() -> Result<String, ServerFnError> {
  73. Ok("Hello from the server!".to_string())
  74. }