simple.rs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. use std::future::Future;
  2. use dioxus_core::{component::AnyContext, prelude::*};
  3. use virtual_dom_rs::Closure;
  4. pub fn main() {
  5. let dom = VirtualDom::new(root);
  6. let mut renderer = TextRenderer::new(dom);
  7. let output = renderer.render();
  8. }
  9. fn root(ctx: &mut AnyContext) -> VirtualNode {
  10. // the regular html syntax
  11. // html! {
  12. // <html>
  13. // <Head />
  14. // <Body />
  15. // <Footer />
  16. // </html>
  17. // }
  18. // or a manually crated vnode
  19. {
  20. let mut node_0 = VirtualNode::element("div");
  21. let mut node_1: IterableNodes = ("Hello world!").into();
  22. node_1.first().insert_space_before_text();
  23. let mut node_2 = VirtualNode::element("button");
  24. {
  25. // let closure = Closure::wrap(Box::new(|_| {}) as Box<FnMut(_)>);
  26. // let closure_rc = std::rc::Rc::new(closure);
  27. // node_2
  28. // .as_velement_mut()
  29. // .expect("Not an element")
  30. // .events
  31. // .0
  32. // .insert("onclick".to_string(), closure_rc);
  33. }
  34. if let Some(ref mut element_node) = node_0.as_velement_mut() {
  35. element_node.children.extend(node_1.into_iter());
  36. }
  37. if let Some(ref mut element_node) = node_0.as_velement_mut() {
  38. element_node.children.extend(node_2.into_iter());
  39. }
  40. VirtualNode
  41. node_0
  42. }
  43. }
  44. fn Head(ctx: &mut AnyContext) -> VirtualNode {
  45. html! {
  46. <head>
  47. {"Head Section"}
  48. </head>
  49. }
  50. }
  51. fn Body(ctx: &mut AnyContext) -> VirtualNode {
  52. html! {
  53. <body>
  54. {"Footer Section"}
  55. </body>
  56. }
  57. }
  58. fn Footer(ctx: &mut AnyContext) -> VirtualNode {
  59. html! {
  60. <div>
  61. {"Footer Section"}
  62. </div>
  63. }
  64. }