kitchen_sink.rs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. use dioxus::dioxus_core::{ElementId, Mutation};
  2. use dioxus::prelude::*;
  3. fn basic_syntax_is_a_template() -> Element {
  4. let asd = 123;
  5. let var = 123;
  6. rsx! {
  7. div { key: "{asd}", class: "asd", class: "{asd}", class: if true {
  8. "{asd}"
  9. }, class: if false {
  10. "{asd}"
  11. }, onclick: move |_| {},
  12. div { "{var}" }
  13. div {
  14. h1 { "var" }
  15. p { "you're great!" }
  16. div { background_color: "red",
  17. h1 { "var" }
  18. div {
  19. b { "asd" }
  20. "not great"
  21. }
  22. }
  23. p { "you're great!" }
  24. }
  25. }
  26. }
  27. }
  28. #[test]
  29. fn dual_stream() {
  30. let mut dom = VirtualDom::new(basic_syntax_is_a_template);
  31. let edits = dom.rebuild_to_vec().santize();
  32. use Mutation::*;
  33. assert_eq!(edits.edits, {
  34. [
  35. LoadTemplate { name: "template", index: 0, id: ElementId(1) },
  36. SetAttribute {
  37. name: "class",
  38. value: "asd 123 123".into_value(),
  39. id: ElementId(1),
  40. ns: None,
  41. },
  42. NewEventListener { name: "click".to_string(), id: ElementId(1) },
  43. HydrateText { path: &[0, 0], value: "123".to_string(), id: ElementId(2) },
  44. AppendChildren { id: ElementId(0), m: 1 },
  45. ]
  46. });
  47. }