rsxt.rs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #![allow(non_snake_case)]
  2. use dioxus_core as dioxus;
  3. use dioxus::prelude::*;
  4. use dioxus_web::WebsysRenderer;
  5. fn main() {
  6. wasm_logger::init(wasm_logger::Config::new(log::Level::Trace));
  7. console_error_panic_hook::set_once();
  8. wasm_bindgen_futures::spawn_local(async {
  9. let props = ExampleProps { initial_name: "..?", blarg: vec!["abc".to_string(), "abc".to_string()]};
  10. WebsysRenderer::new_with_props(Example, props)
  11. .run()
  12. .await
  13. .unwrap()
  14. });
  15. }
  16. #[derive(PartialEq, Props)]
  17. struct ExampleProps {
  18. initial_name: &'static str,
  19. blarg: Vec<String>
  20. }
  21. static Example: FC<ExampleProps> = |ctx, props| {
  22. let (name, set_name) = use_state(&ctx, move || props.initial_name);
  23. let sub = props.blarg.last().unwrap();
  24. ctx.render(rsx! {
  25. div {
  26. class: "py-12 px-4 text-center w-full max-w-2xl mx-auto"
  27. span {
  28. class: "text-sm font-semibold"
  29. "Dioxus Example: Jack and Jill"
  30. }
  31. h2 {
  32. class: "text-5xl mt-2 mb-6 leading-tight font-semibold font-heading"
  33. "Hello, {name}"
  34. }
  35. // CustomButton { name: sub, set_name: Box::new(move || set_name("jack")) }
  36. CustomButton { name: "Jack!", set_name: Box::new(set_name) }
  37. CustomButton { name: "Jill!", set_name: Box::new(set_name) }
  38. CustomButton { name: "Bob!", set_name: Box::new(set_name) }
  39. CustomButton { name: "Bill!", set_name: Box::new(set_name) }
  40. CustomButton { name: "Dill!", set_name: Box::new(set_name) }
  41. CustomButton { name: "Crack!", set_name: Box::new(set_name) }
  42. CustomButton { name: "back!", set_name: Box::new(set_name) }
  43. CustomButton { name: "cheder!", set_name: Box::new(set_name) }
  44. CustomButton { name: "Jack!", set_name: Box::new(set_name) }
  45. CustomButton { name: "Jill!", set_name: Box::new(set_name) }
  46. CustomButton { name: "Bob!", set_name: Box::new(set_name) }
  47. CustomButton { name: "Bill!", set_name: Box::new(set_name) }
  48. CustomButton { name: "Dill!", set_name: Box::new(set_name) }
  49. CustomButton { name: "Crack!", set_name: Box::new(set_name) }
  50. CustomButton { name: "back!", set_name: Box::new(set_name) }
  51. CustomButton { name: "cheder!", set_name: Box::new(set_name) }
  52. CustomButton { name: "Jack!", set_name: Box::new(set_name) }
  53. CustomButton { name: "Jill!", set_name: Box::new(set_name) }
  54. CustomButton { name: "Bob!", set_name: Box::new(set_name) }
  55. CustomButton { name: "Bill!", set_name: Box::new(set_name) }
  56. CustomButton { name: "Dill!", set_name: Box::new(set_name) }
  57. CustomButton { name: "Crack!", set_name: Box::new(set_name) }
  58. CustomButton { name: "back!", set_name: Box::new(set_name) }
  59. CustomButton { name: "cheder!", set_name: Box::new(set_name) }
  60. CustomButton { name: "Jack!", set_name: Box::new(set_name) }
  61. CustomButton { name: "Jill!", set_name: Box::new(set_name) }
  62. CustomButton { name: "Bob!", set_name: Box::new(set_name) }
  63. CustomButton { name: "Bill!", set_name: Box::new(set_name) }
  64. CustomButton { name: "Dill!", set_name: Box::new(set_name) }
  65. CustomButton { name: "Crack!", set_name: Box::new(set_name) }
  66. CustomButton { name: "back!", set_name: Box::new(set_name) }
  67. CustomButton { name: "cheder!", set_name: Box::new(set_name) }
  68. CustomButton { name: "Jack!", set_name: Box::new(set_name) }
  69. CustomButton { name: "Jill!", set_name: Box::new(set_name) }
  70. CustomButton { name: "Bob!", set_name: Box::new(set_name) }
  71. CustomButton { name: "Bill!", set_name: Box::new(set_name) }
  72. CustomButton { name: "Dill!", set_name: Box::new(set_name) }
  73. CustomButton { name: "Crack!", set_name: Box::new(set_name) }
  74. CustomButton { name: "back!", set_name: Box::new(set_name) }
  75. CustomButton { name: "cheder!", set_name: Box::new(set_name) }
  76. CustomButton { name: "Jack!", set_name: Box::new(set_name) }
  77. CustomButton { name: "Jill!", set_name: Box::new(set_name) }
  78. CustomButton { name: "Bob!", set_name: Box::new(set_name) }
  79. CustomButton { name: "Bill!", set_name: Box::new(set_name) }
  80. CustomButton { name: "Dill!", set_name: Box::new(set_name) }
  81. CustomButton { name: "Crack!", set_name: Box::new(set_name) }
  82. CustomButton { name: "back!", set_name: Box::new(set_name) }
  83. CustomButton { name: "cheder!", set_name: Box::new(set_name) }
  84. // CustomButton { name: "Bill!", set_name: Box::new(move || set_name("Bill")) }
  85. // CustomButton { name: "Reset!", set_name: Box::new(move || set_name(props.initial_name)) }
  86. }
  87. })
  88. };
  89. #[derive(Props)]
  90. struct ButtonProps<'src> {
  91. name: &'static str,
  92. // name: &'src str,
  93. set_name: Box< dyn Fn(&'static str) + 'src>
  94. }
  95. impl PartialEq for ButtonProps<'_> {
  96. fn eq(&self, other: &Self) -> bool {
  97. false
  98. }
  99. }
  100. fn CustomButton<'a>(ctx: Context<'a>, props: &'a ButtonProps<'a>) -> DomTree {
  101. ctx.render(rsx!{
  102. // div {
  103. button {
  104. class: "inline-block py-4 px-8 mr-6 leading-none text-white bg-indigo-600 hover:bg-indigo-900 font-semibold rounded shadow"
  105. onmouseover: move |_| (props.set_name)(props.name)
  106. "{props.name}"
  107. }
  108. // }
  109. })
  110. }