create.rs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #![allow(unused, non_upper_case_globals, non_snake_case)]
  2. use dioxus::prelude::*;
  3. use dioxus_core::ElementId;
  4. use dioxus_core::NoOpMutations;
  5. use dioxus_signals::*;
  6. #[test]
  7. fn create_signals_global() {
  8. let mut dom = VirtualDom::new(|| {
  9. rsx! {
  10. for _ in 0..10 {
  11. Child {}
  12. }
  13. }
  14. });
  15. fn Child() -> Element {
  16. let signal = create_without_cx();
  17. rsx! {
  18. "{signal}"
  19. }
  20. }
  21. dom.rebuild_in_place();
  22. fn create_without_cx() -> Signal<String> {
  23. Signal::new("hello world".to_string())
  24. }
  25. }
  26. #[test]
  27. fn deref_signal() {
  28. let mut dom = VirtualDom::new(|| {
  29. rsx! {
  30. for _ in 0..10 {
  31. Child {}
  32. }
  33. }
  34. });
  35. fn Child() -> Element {
  36. let signal = Signal::new("hello world".to_string());
  37. // You can call signals like functions to get a Ref of their value.
  38. assert_eq!(&*signal(), "hello world");
  39. rsx! {
  40. "hello world"
  41. }
  42. }
  43. dom.rebuild_in_place();
  44. }
  45. #[test]
  46. fn drop_signals() {
  47. let mut dom = VirtualDom::new(|| {
  48. let generation = generation();
  49. let count = if generation % 2 == 0 { 10 } else { 0 };
  50. rsx! {
  51. for _ in 0..count {
  52. Child {}
  53. }
  54. }
  55. });
  56. fn Child() -> Element {
  57. let signal = create_without_cx();
  58. rsx! {
  59. "{signal}"
  60. }
  61. }
  62. dom.rebuild_in_place();
  63. dom.mark_dirty(ScopeId::ROOT);
  64. dom.render_immediate(&mut NoOpMutations);
  65. fn create_without_cx() -> Signal<String> {
  66. Signal::new("hello world".to_string())
  67. }
  68. }