list.rs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. use std::collections::HashMap;
  2. use dioxus::prelude::*;
  3. use dioxus_core as dioxus;
  4. use dioxus_web::WebsysRenderer;
  5. fn main() {
  6. wasm_logger::init(wasm_logger::Config::new(log::Level::Debug));
  7. console_error_panic_hook::set_once();
  8. wasm_bindgen_futures::spawn_local(async move {
  9. WebsysRenderer::new_with_props(App, ())
  10. .run()
  11. .await
  12. .expect("major crash");
  13. });
  14. }
  15. use lazy_static::lazy_static;
  16. lazy_static! {
  17. static ref DummyData: HashMap<String, String> = {
  18. let vals = vec![
  19. ("0 ", "abc123"),
  20. ("1 ", "abc124"),
  21. ("2 ", "abc125"),
  22. ("3 ", "abc126"),
  23. ("4 ", "abc127"),
  24. ("5 ", "abc128"),
  25. ("6 ", "abc129"),
  26. ("7 ", "abc1210"),
  27. ("8 ", "abc1211"),
  28. ("9 ", "abc1212"),
  29. ("10 ", "abc1213"),
  30. ("11 ", "abc1214"),
  31. ("12 ", "abc1215"),
  32. ("13 ", "abc1216"),
  33. ("14 ", "abc1217"),
  34. ("15 ", "abc1218"),
  35. ("16 ", "abc1219"),
  36. ("17 ", "abc1220"),
  37. ("18 ", "abc1221"),
  38. ("19 ", "abc1222"),
  39. ];
  40. vals.into_iter()
  41. .map(|(a, b)| (a.to_string(), b.to_string()))
  42. .collect()
  43. };
  44. }
  45. static App: FC<()> = |ctx, _| {
  46. let items = use_state(&ctx, || DummyData.clone());
  47. // handle new elements
  48. let add_new = move |_| {
  49. items.modify(|m| {
  50. let k = m.len();
  51. let v = match (k % 3, k % 5) {
  52. (0, 0) => "FizzBuzz".to_string(),
  53. (0, _) => "Fizz".to_string(),
  54. (_, 0) => "Buzz".to_string(),
  55. _ => k.to_string(),
  56. };
  57. m.insert(k.to_string(), v);
  58. })
  59. };
  60. let elements = items.iter().map(|(k, v)| {
  61. rsx! {
  62. li {
  63. span {"{k}: {v}"}
  64. button {
  65. "Remove"
  66. onclick: move |_| {
  67. let key_to_remove = k.clone();
  68. items.modify(move |m| { m.remove(&key_to_remove); } )
  69. }
  70. }
  71. }
  72. }
  73. });
  74. ctx.render(rsx!(
  75. div {
  76. h1 {"Some list"}
  77. // button to add new item
  78. button {
  79. "add new"
  80. onclick: {add_new}
  81. }
  82. // list elements
  83. ul {
  84. {elements}
  85. }
  86. }
  87. ))
  88. };