rsx_usage.rs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. use bumpalo::Bump;
  2. use dioxus_core::prelude::*;
  3. fn main() {}
  4. trait SProps {}
  5. trait Comp {
  6. type Props;
  7. }
  8. impl<T> Comp for FC<T> {
  9. type Props = T;
  10. }
  11. fn test() {
  12. // let g: FC<ButtonProps> = CustomButton;
  13. }
  14. trait Render {
  15. fn render(ctx: Context, props: &Self) -> DomTree;
  16. }
  17. // include as much as you might accept
  18. struct Button<'a> {
  19. onhover: Option<&'a dyn Fn()>,
  20. }
  21. impl Render for Button<'_> {
  22. fn render(ctx: Context, props: &Self) -> DomTree {
  23. let onfocus = move |evt: ()| log::debug!("Focused");
  24. // todo!()
  25. ctx.render(rsx! {
  26. button {
  27. // ..props.attrs,
  28. class: "abc123",
  29. // style: { a: 2, b: 3, c: 4 },
  30. onclick: move |evt| {
  31. // log::info("hello world");
  32. },
  33. // Custom1 { a: 123 }
  34. // Custom2 { a: 456, "abc", h1 {"1"}, h2 {"2"} }
  35. // Custom3 { a: "sometext goes here" }
  36. // Custom4 { onclick: |evt| log::info("click") }
  37. }
  38. })
  39. }
  40. }
  41. // #[fc]
  42. // fn Button(ctx: Context, onhover: Option<&dyn Fn()>) -> DomTree {}
  43. // h1 {
  44. // tag: "type", abc: 123, class: "big small wide short",
  45. // "title1"
  46. // "title1"
  47. // "title1"
  48. // "title"
  49. // }
  50. // h1 ("title") {
  51. // tag: "type",
  52. // abc: 123,
  53. // class: "big small wide short",
  54. // }
  55. // // <button
  56. // // class="inline-block py-4 px-8 mr-6 leading-none text-white bg-indigo-600 hover:bg-indigo-900 font-semibold rounded shadow"
  57. // // onclick={move |_| set_name("jill")}
  58. // // onclick={move |_| set_name("jill")}
  59. // // >
  60. // // "Jill!"
  61. // // </button>
  62. // button { "Jill!",
  63. // class: "inline-block py-4 px-8 mr-6 leading-none text-white bg-indigo-600 hover:bg-indigo-900 font-semibold rounded shadow"
  64. // onclick: move |_| set_name("jill"),
  65. // onclick: move |_| set_name("jill"),
  66. // }
  67. // button {
  68. // class: "inline-block py-4 px-8 mr-6 leading-none text-white bg-indigo-600 hover:bg-indigo-900 font-semibold rounded shadow"
  69. // onclick: move |_| set_name("jill"),
  70. // onclick: move |_| set_name("jill"),
  71. // // this is valid
  72. // "Jill!",
  73. // // this is also valid
  74. // {"Jill!"}
  75. // }
  76. // h1 { "Text", class: "inline-block py-4 px-8 mr-6 leading-none" }
  77. // // <h1 class="inline-block py-4 px-8 mr-6 leading-none">
  78. // // "Text"
  79. // // </h1>
  80. // h1 {
  81. // div {
  82. // h1 {}
  83. // h2 {}
  84. // Brick {}
  85. // p {}
  86. // p {
  87. // tag: "type",
  88. // abc: 123,
  89. // enabled: true,
  90. // class: "big small wide short",
  91. // a { "abcder" },
  92. // h2 { "whatsup", class: "abc-123" },
  93. // CustomComponent { a: 123, b: 456, key: "1" },
  94. // }
  95. // div { class: "big small wide short",
  96. // div {},
  97. // div {},
  98. // div {},
  99. // div {},
  100. // }
  101. // }
  102. // }
  103. // h2 {}
  104. // h3 {}
  105. // "abcd123"