1
0

anti_patterns.rs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #![allow(non_snake_case, unused)]
  2. //! This example shows what *not* to do
  3. use std::collections::HashMap;
  4. use dioxus::prelude::*;
  5. fn main() {}
  6. fn AntipatternNestedFragments(cx: Scope<()>) -> Element {
  7. // ANCHOR: nested_fragments
  8. // ❌ Don't unnecessarily nest fragments
  9. let _ = cx.render(rsx!(
  10. Fragment {
  11. Fragment {
  12. Fragment {
  13. Fragment {
  14. Fragment {
  15. div { "Finally have a real node!" }
  16. }
  17. }
  18. }
  19. }
  20. }
  21. ));
  22. // ✅ Render shallow structures
  23. cx.render(rsx!(
  24. div { "Finally have a real node!" }
  25. ))
  26. // ANCHOR_END: nested_fragments
  27. }
  28. #[derive(PartialEq, Props)]
  29. struct NoKeysProps {
  30. data: HashMap<u32, String>,
  31. }
  32. fn AntipatternNoKeys(cx: Scope<NoKeysProps>) -> Element {
  33. // ANCHOR: iter_keys
  34. let data: &HashMap<_, _> = &cx.props.data;
  35. // ❌ No keys
  36. cx.render(rsx! {
  37. ul {
  38. data.values().map(|value| rsx!(
  39. li { "List item: {value}" }
  40. ))
  41. }
  42. });
  43. // ❌ Using index as keys
  44. cx.render(rsx! {
  45. ul {
  46. cx.props.data.values().enumerate().map(|(index, value)| rsx!(
  47. li { key: "{index}", "List item: {value}" }
  48. ))
  49. }
  50. });
  51. // ✅ Using unique IDs as keys:
  52. cx.render(rsx! {
  53. ul {
  54. cx.props.data.iter().map(|(key, value)| rsx!(
  55. li { key: "{key}", "List item: {value}" }
  56. ))
  57. }
  58. })
  59. // ANCHOR_END: iter_keys
  60. }