kitchen_sink.rs 1.4 KB

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